Sends for the fellow dear visitors:welcome to dongpad!


 Welcome to DongPad!

 msn


<< < | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | > >> 预览模式: 普通 | 列表

穷人最缺少的是什么?

This Article is Published by Live Writer。

法国一位年轻人很穷,很苦。后来,他以推销装饰肖像画起家,在不到10年的时间里,迅速跻身于法国50大富翁之列,成为一位年轻的媒体大亨。不幸,他因患上前列腺癌,1998年去世。他去世后,法国的一份报纸刊登了他的一份遗嘱。在这份遗嘱里,他说:我曾经是一位穷人,在以一个富人的身份跨入天堂的门槛之前,我把自己成为富人的秘诀留下,谁若能通过回答“穷人最缺少的是什么”而猜中我成为富人的秘诀,他将能得到我的祝贺,我留在银行私人保险箱内的100 万法郎,将作为睿智地揭开贫穷之谜的人的奖金、也是我在天堂给予他的欢呼与掌声。遗嘱刊出之后,有18461个人寄来了自己的答案。这些答案,五花八门,应有尽有。绝大部分的人认为,穷人最缺少的当然是金钱了,有了钱就不会再是穷人了。另有一部分人认为,穷人之所以穷,最缺少的是机会,穷人之穷是穷在背时上面。又有一部分认为,穷人最缺少的是技能,一无所长所以才穷,有一技之长才能迅速致富。还有的人说,穷人最缺少的是帮助和关爱,是漂亮,是名牌衣服,是总统的职位等等。
在这位富翁逝世周年纪念日,他的律师和代理人在公证部门的监督下,打开了银行内的私人保险箱,公开了他致富的秘诀,他认为:穷人最缺少的是成为富人的野心。在所有答案中,有一位年仅九岁的女孩猜对了。为什么只有这位9岁的女孩想到穷人最缺少的是野心?她在接受100万法郎的颁奖之日,说“每次,我姐姐把她11岁的男朋友带回家时,总是警告我说不要有野心!不要有野心!于是我想,也许野心可以让人得到自己想得到的东西”。
谜底揭开之后,震动法国,并波及英美。一些新贵、富翁在就此话题谈论时,均毫不掩饰地承认:野心是永恒的“治穷”特效药,是所有奇迹的萌发点,穷人之所以穷,大多是因为他们有一种无可救药的弱点,也就是缺乏致富的野心。

from Jews’

Tags: DongPad

分类:Life | 固定链接 |评论: 0| 引用: 0 | 查看次数: 359 | 返回顶部

Expression Tree Visualizer的使用

This Article is Published by Live Writer。

在Visual Studio 2008 CSharp samples中有很多有价值的工具,而Expression Tree Visualizer就是其中的,
你可以下载,也可以通过更新再线samples版本得到
你将这个Expression Tree Visualizer程序编译运行,后将在
...\LinqSamples\ExpressionTreeVisualizer\ExpressionTreeVisualizer\bin\Debug
中的.dll文件复制出来到
...\Program Files\Microsoft Visual Studio 9.0\Common7\Packages\Debugger\Visualizers.中,


之后你就可以通过上面这两图的方式打开它


其实也和使用QueryVisualizer一样.

原文地址:worksguo,cnblogs.com

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 550 | 返回顶部

Visual Studio International Feature Pack 2.0 Beta

This Article is Published by Live Writer。

Visual Studio International Feature Pack 2.0 是对 1.0 版本( 1.0 版的产品名是 Microsoft Visual Studio International Pack 1.0 SR1) 的扩展,包含一组控件和类库,设计用来帮助.NET开发人员创建国际化程序。

  • Chinese Text Alignment Class Library and TextBox Controls 包含支持简体中文文本对齐的WinForm 和 WPF 的TextBox控件, 以及供帮助开发人员很容易地按中文文本对齐显示字符串的一个类库。
  • Chinese Auto Complete Class Library and TextBox Controls 包含支持感知简体中文和繁体中文输入法并自动完成的WinForm 和 WPF 的TextBox控件, 以及供开发人员很容易地向标准控件添加感知输入法并自动完成功能的一个类库。
  • Korean Auto Complete Class Library and ComboBox Controls 包含支持感知韩语输入法并自动完成的WinForm 和 WPF 的ComboBox控件, 以及供开发人员很容易地向标准控件添加感知输入法并自动完成功能的一个类库。
  • Numeric Formatting Class Library 包含支持五种语言的数字格式化成文字的类, 2.0 版支持格式化阿拉伯数字为阿拉伯文字。
  • Yomigana Framework 包含了类库和控件。
    • 类库:
      • 通用目的的一些类,用泛型实现对一个可枚举的类型注音。
      • 特殊目的的一些类,用以上泛型实现对一个字符串用某种类型中注音。
      • 特殊目的的一些StringAnnotation 类,用以上泛型实现对一个字符串用字符串注音,包括解析和格式化功能。
      • 一个比较器类,使用以上类实现比较字符串。
      • 一个实现了 IEnumerable 的数据结构,把一个字符串分成枚举的字符串段,的数据结构,把一个字符串分成枚举的字符串段,并用 IEnumerator 输出。
    • 控件:
      • 加强的Ajax/WPF/WinForm textboxes 用来根据用户的输入捕获读音。
      • 一个加强的使用Ruby标签的ASP.NET Label。

点击链接 Visual Studio International Feature Pack 2.0 Beta (http://download.microsoft.com/download/7/7/0/770D7C6E-FEFE-466A-93A2-D69017C9DBFA/VSIPSetup.msi) 可以下载该软件包的所有组件

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 455 | 返回顶部

IQueryable<T> vs IEnumerable<T>

This Article is Published by Live Writer。

IQueryable is a very powerful feature that enables a variety of interesting deferred execution
scenarios (like paging and composition based queries). As with all powerful features, you want to be
careful with how you use it and make sure it is not abused.
It is important to recognize that returning an IQueryable result from your repository enables calling
code to append on chained operator methods to it, and so participate in the ultimate query execution
.
If you do not want to provide calling code this ability, then you should return back IList, List or
IEnumerable results - which contain the results of a query that has already executed
.
For pagination scenarios this would require you to push the actual data pagination logic into the
repository method being called. In this scenario we might update our FindUpcomingDinners() finder
method to have a signature that either returned a PaginatedList:
PaginatedList< Dinner> FindUpcomingDinners(int pageIndex, int pageSize) { }
Or return back an IList, and use a “totalCount” out param to return the total count of Dinners:
IList FindUpcomingDinners(int pageIndex, int pageSize, out int totalCount) { }

From the NerdDiner Pro!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 578 | 返回顶部

C#小技巧:设置方法或属性为[已过时]

在C#中,如果有一个方法我们不想继续使用,需要废弃的时候,可以在该方法前面加上一个[Obsolete]。例如:[Obsolete]
public double GetArea()
{
switch (_arg)
{
case CIRCLE:
return _size * _size;
case SQUARE:
return _size * _size;
case RIGHT_TRIANGLE:
return _size * _size / 2;
default:
return 0;
}
}
这时候,如果还有程序使用该方法,编译时会报如下警告信息:GetArea()方法已过时。
From Terrylee's cnblogs!


Tags: DongPad 过时

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 717 | 返回顶部

Foundations of F#

This Article is Published by Live Writer。

Functional programming (FP) is the future of .NET programming, and F# is much more than just an FP language. Every professional .NET programmer needs to learn about FP, and there's no better way to do it than by learning F#--and no easier way to learn F# than from Foundations of F#.

If you're already familiar with FP, you'll find F# the language you've always dreamed of. And all .NET programmers will find F# an exciting real-world alternative to C# and Visual Basic. This book is likely to have many imitators, but few true competitors. Written by F# evangelist Rob Pickering, and tech reviewed by F#'s main designer, Don Syme, this is an elegant, comprehensive introduction to all aspects of the language and an incisive guide to using F# for real-world professional development. F# is the future of programming (not just on .NET), and the future is now.

Download by click here or here!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 376 | 返回顶部

C# 语言和 .NET Framework 介绍

This Article is Published by Live Writer。

C# 是一种简洁、类型安全的面向对象的语言,开发人员可以使用它来构建在 .NET Framework 上运行的各种安全、可靠的应用程序。使用 C#,您可以创建传统的 Windows 客户端应用程序、XML Web services、分布式组件、客户端 - 服务器应用程序、数据库应用程序以及很多其他类型的程序。Microsoft Visual C# 2005 提供高级代码编辑器、方便的用户界面设计器、集成调试器和许多其他工具,以在 C# 语言版本 2.0 和 .NET Framework 的基础上加快应用程序的开发。

C# 语言

C# 语法表现力强,只有不到 90 个关键字,而且简单易学。C# 的大括号语法使任何熟悉 C、C++ 或 Java 的人都可以立即上手。了解上述任何一种语言的开发人员通常在很短的时间内就可以开始使用 C# 高效地工作。C# 语法简化了 C++ 的诸多复杂性,同时提供了很多强大的功能,例如可为空的值类型、枚举、委托、匿名方法和直接内存访问,这些都是 Java 所不具备的。C# 还支持泛型方法和类型,从而提供了更出色的类型安全和性能。C# 还提供了迭代器,允许集合类的实现者定义自定义的迭代行为,简化了客户端代码对它的使用。

作为一种面向对象的语言,C# 支持封装、继承和多态性概念。所有的变量和方法,包括 Main 方法(应用程序的入口点),都封装在类定义中。类可能直接从一个父类继承,但它可以实现任意数量的接口。重写父类中的虚方法的各种方法要求 override 关键字作为一种避免意外重定义的方式。在 C# 中,结构类似于一个轻量类;它是一种堆栈分配的类型,可以实现接口,但不支持继承。

除了这些基本的面向对象的原理,C# 还通过几种创新的语言结构加快了软件组件的开发,其中包括:

  • 封装的方法签名(称为委托),它实现了类型安全的事件通知。

  • 属性 (Property),充当私有成员变量的访问器。

  • 属性 (Attribute),提供关于运行时类型的声明性元数据。

  • 内联 XML 文档注释。

在 C# 中,如果需要与其他 Windows 软件(如 COM 对象或本机 Win32 DLL)交互,可以通过一个称为“Interop”的过程来实现。互操作使 C# 程序能够完成本机 C++ 应用程序可以完成的几乎任何任务。在直接内存访问必不可少的情况下,C# 甚至支持指针和“不安全”代码的概念。

C# 的生成过程比 C 和 C++ 简单,比 Java 更为灵活。没有单独的头文件,也不要求按照特定顺序声明方法和类型。C# 源文件可以定义任意数量的类、结构、接口和事件。

下列各项是其他 C# 资源:

.NET Framework 平台体系结构

C# 程序在 .NET Framework 上运行,它是 Windows 的一个必要组件,包括一个称为公共语言运行时 (CLR) 的虚拟执行系统和一组统一的类库。CLR 是 Microsoft 的公共语言基础结构 (CLI) 的一个商业实现。CLI 是一种国际标准,是用于创建语言和库在其中无缝协同工作的执行和开发环境的基础。

用 C# 编写的源代码被编译为一种符合 CLI 规范的中间语言 (IL)。IL 代码与资源(如位图和字符串)一起作为一种称为程序集的可执行文件存储在磁盘上,通常具有的扩展名为 .exe 或 .dll。程序集包含清单,它提供关于程序集的类型、版本、区域性和安全要求等信息。

执行 C# 程序时,程序集将加载到 CLR 中,这可能会根据清单中的信息执行不同的操作。然后,如果符合安全要求,CLR 执行实时 (JIT) 编译以将 IL 代码转换为本机机器指令。CLR 还提供与自动垃圾回收、异常处理和资源管理有关的其他服务。由 CLR 执行的代码有时称为“托管代码”,它与编译为面向特定系统的本机机器语言的“非托管代码”相对应。下图演示了 C# 源代码文件、基类库、程序集和 CLR 的编译时与运行时的关系。

从 C# 源代码到计算机执行

语言互操作性是 .NET Framework 的一个关键功能。因为由 C# 编译器生成的 IL 代码符合公共类型规范 (CTS),因此从 C# 生成的 IL 代码可以与从 Visual Basic、Visual C++、Visual J# 的 .NET 版本或者其他 20 多种符合 CTS 的语言中的任何一种生成的代码进行交互。单一程序集可能包含用不同 .NET 语言编写的多个模块,并且类型可以相互引用,就像它们是用同一种语言编写的。

除了运行时服务,.NET Framework 还包含一个由 4000 多个类组成的内容详尽的库,这些类被组织为命名空间,为从文件输入和输出到字符串操作、到 XML 分析、到 Windows 窗体控件的所有内容提供多种有用的功能。典型的 C# 应用程序使用 .NET Framework 类库广泛地处理常见的“日常”任务。

有关 .NET Framework 平台的更多信息,请参见 .NET Framework 概述

原文在这里,做学问嘛,要温故而知新!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 333 | 返回顶部

LINQ: The Future of Data Access in C# 3.0

This Article is Published by Live Writer。

Language Integrated Query (LINQ) is Microsoft's new technology for powerful, general purpose data access. This technology provides a fully-integrated query language, available in both C# 3.0 and VB 9.0, for high-level data access against objects, relational databases, and XML documents. In this Short Cut you'll learn about LINQ and the proposed C# 3.0 extensions that support it. You'll also see how you can use LINQ and C# to accomplish a variety of tasks, from querying objects to accessing relational data and XML. Best of all, you'll be able to test the examples and run your own code using the latest LINQ CTP, available free from Microsoft. This Short Cut includes a complete reference to the standard LINQ query operators.
You can download from here!

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 426 | 返回顶部

c#的default、using和yield使用小结

This Article is Published by Live Writer。

一、default的应用场合

1、switch...case
在switch语句中,如果没有任何case表达式与开关值匹配,则控制传递给跟在可选default标签后的语句。如果没有default标签,则控制传递到switch以外。
对于c#,为了便于维护,建议default项最好要写。
示例代码:

Code

2、在泛型类和泛型方法中,在预先未知以下情况时,如何将默认值分配给参数化类型T:
(1)T是引用类型还是值类型;
(2)如果T为值类型,则它是数值还是结构。
示例代码:

public class GenericClass
    {
public static T GetDefaultT(T obj)
        {
            obj = default(T); //将默认值分配给参数化类型T
return obj;
        }
    }

备注:  给定参数化类型T的一个变量obj,只有当T为数值类型而且不是结构时,语句t = 0才能正常使用;只有当T为引用类型时,语句obj= null才有效。
使用default关键字,对于数值类型会返回零,对于引用类型会返回空,对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型。
看下面的代码:

Code

二、using的应用场合
1、直接引入命名空间
using System.Data.SqlClient; //引入命名空间
2.using别名。using + 别名 = 包括详细命名空间信息的具体的类型。
这种做法有个好处就是当同一个cs引用了两个不同的命名空间,但两个命名空间都包括了一个相同名字的类型的时候。当需要用到这个类型的时候,就每个地方都要用详细命名空间的办法来区分这些相同名字的类型。而用别名的方法会更简洁,用到哪个类就给哪个类做别名声明就可以了。
注意:并不是说两个名字重复,给其中一个用了别名,另外一个就不需要用别名了,如果两个都要使用,则两个都需要用using来定义别名的。
例如我们用以下语句引入using System.Data.SqlClient命名空间:
using SqlServer=using System.Data.SqlClient;
这时我们就可以用 SqlServer表示using System.Data.SqlClient命名空间,给程序书写带来方便。
3、using语句定义一个范围,在该范围内处理对象。
当年刚学asp.net那会,曾经对照着书本,吭哧吭哧动手写了很多类似下面的代码:

Code

直到遇到SqlHelper,才省了很多力气花在业务逻辑上,当年真是...,呵呵。
言归正传,什么时候适合用using呢?当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose方法。要达到这样的目的,用try...finally是可以的,但用using看起来更方便和简洁。看下面的代码:

Code

我们看到,using确实比try...finally少几行代码,不过,它们的性能怎么样呢?看两个方法各自生成的对应的IL:
(1)使用using

(2)使用try...finally

原来它们的性能几乎是一样的。上面的两段IL可以作为using和try...finally性能的参照。如果你在程序中经常try...catch或者using,对性能的影响是很明显的。
需要引起注意的是,using实例化一个对象的时候,对应的类必须实现IDisposable接口,比如我们延续上面的代码,增加一个如下方法:

static void Test()
        {
using (Program program = new Program()) //编译器报错,Program类必须要实现IDisposable接口
            {
//do something
            }
        }

正像注释写的那样,类Program必须实现IDisposable接口,写成class Program : IDisposable{...}这样就可以了。
三、yield的应用
1、迭代器块中用于向枚举数对象提供值或发出迭代结束信号。
它的形式如下:
yield return ;或者yield break;
下面看一个示例:


using System;
using System.Collections;
using System.Collections.Generic;
namespace MyCsStudy
{
///


/// 程序员,继承接口IEnumerable,实现Programer自己的迭代器
///

public class Programer : IEnumerable
    {
string[] strNameArr = new string[] { };//存程序员名
public Programer(params string[] inputNames)
        {
            strNameArr = new string[inputNames.Length];
            inputNames.CopyTo(strNameArr, 0);
        }
public  IEnumerator GetEnumerator()
        {
foreach (string s in strNameArr)
            {
yield return s; //通过yield return输出遍历程序员名称结果集
            }
        }
    }
class Program
    {
static void Main(string[] args)
        {
string[] programers = new string[] { "jeffery zhao", "dudu", "terrylee", "jeffwong" };
            Programer cnPrograms = new Programer(programers);
//下面注释部分的写法我们非常熟悉
//IEnumerator e = cnPrograms.GetEnumerator();
//while (e.MoveNext())
//{
//    Console.WriteLine(e.Current);
//}
//foreach in 和上面的注释代码实质是等价的
foreach (string s in cnPrograms)
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
        }
    }
}

2、几个要注意的地方 
(1)、计算表达式并以枚举数对象值的形式返回;expression 必须可以隐式转换为迭代器的 yield 类型。
(2)、yield 语句只能出现在iterator 块中,该块可用作方法、运算符或访问器的体。
这类方法、运算符或访问器的体受以下约束的控制:
a、不允许不安全块。
b、方法、运算符或访问器的参数不能是 ref 或 out。
c、yield 语句不能出现在匿名方法中。
(3)、当和expression一起使用时,yield return语句不能出现在catch块中或含有一个或多个catch子句的 try 块中。

3、最后,为了深入理解迭代,我们有必要介绍一下.net两个和迭代关联密切的接口:IEnumerable和IEnumerator
(1)、IEnumerable和IEnumerator元数据对比
a、IEnumerator


using System;
using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
//     支持对非泛型集合的简单迭代。
    [ComVisible(true)]
    [Guid("496B0ABF-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerator
    {
// 摘要:
//     获取集合中的当前元素。
//
// 返回结果:
//     集合中的当前元素。
object Current { get; }
// 摘要:
//     将枚举数推进到集合的下一个元素。
//
// 返回结果:
//     如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
bool MoveNext();
//
// 摘要:
//     将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
void Reset();
    }
}

b、IEnumerable


using System.Runtime.InteropServices;
namespace System.Collections
{
// 摘要:
//     公开枚举数,该枚举数支持在非泛型集合上进行简单迭代。
    [ComVisible(true)]
    [Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
    {
// 摘要:
//     返回一个循环访问集合的枚举数。
//
// 返回结果:
//     可用于循环访问集合的 System.Collections.IEnumerator 对象。
        [DispId(-4)]
        IEnumerator GetEnumerator();
    }
}

(2)、说明
IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current属性返回的是object类型,另外两个是实例方法;
IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历;
IEnumerator:继承自IEnumerator,有Current属性,返回的是T类型;
IEnumerable:继承自IEnumerable,暴露一个IEnumerator,支持在泛型集合中遍历。

(3)总结
a、通过分析(1)中的源码,你也可以从这两个接口的用词选择上,看出其不同:IEnumerable是一个声明式的接口,声明实现该接口的类是“可枚举(enumerable)”的,但并没有说明如何实现iterator;IEnumerator是一个实现式的接口,IEnumerator类就是一个iterator。
b、一个集合要支持foreach方式的遍历,必须实现IEnumerable接口(即必须以某种方式返回IEnumerator对象);
c、IEnumerator对象具体实现了iterator(通过内部的MoveNext(),Reset(),Current)。
d、IEnumerable和IEnumerator通过IEnumerable的GetEnumerator()方法建立了连接,客户端可以通过IEnumerable的GetEnumerator()得到IEnumerator对象,所以从实质上来讲,将GetEnumerator()看作IEnumerator对象的工厂方法也未尝不可。

原文参见这里

Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 404 | 返回顶部

C#和CLR的15个细节

This Article is Published by Live Writer。

这两周一直在training,一共听了4个课程,相当的累啊。

今天先把Jeffrey Richter的培训课:C# and CLR中讲到的一些东西整理一下:

  1. foreach的性能问题

    foreach(string s in rows) { foo(s); }的实现是:

  2. IEnumerator e = rows.GetEnumerator();
    try {
    string s;
    while (e.MoveNext()) {

    查看全部...

    Tags: DongPad

分类:C# | 固定链接 |评论: 0| 引用: 0 | 查看次数: 333 | 返回顶部
<< < | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | > >>