#57个

【转】编写高质量代码改善C#程序的157个建议——建议45:为泛型类型参数指定逆变

 建议45:为泛型类型参数指定逆变逆变是指方法的参数可以是委托或者泛型接口的参数类型的基类。FCL4.0中支持逆变的常用委托有:Func<intT,outTResult>Predicate<inT>常用委托有:IComparer<inT>下面例子演示了泛型类型参数指定逆变所...

【转】编写高质量代码改善C#程序的157个建议——建议44:理解委托中的协变

 建议44:理解委托中的协变委托中的泛型变量天然是部分支持协变的。为什么是“部分支持协变”?看下面示例:classProgram{publicdelegateTGetEmployeeHanlder<T>(stringname);staticvoidMain(){GetEmp...

【转】编写高质量代码改善C#程序的157个建议——建议43:让接口中的泛型参数支持协变

 建议43:让接口中的泛型参数支持协变除了上一建议中提到的使用泛型参数兼容接口不可变性外,还有一种办法是为接口中的泛型声明加上out关键字来支持协变,如下所示:interfaceISalary<outT>//使用out关键字{voidPay();}staticvoidMain(string[]ar...

【转】编写高质量代码改善C#程序的157个建议——建议42:使用泛型参数兼容泛型接口的不可变性

 建议42:使用泛型参数兼容泛型接口的不可变性让返回值类型返回比声明的类型派生程度更大的类型,就是“协变”。如:publicEmployeeGetAEmployee(stringname){Console.WriteLine("我是雇员:"+name);returnnewProgram...

【转】编写高质量代码改善C#程序的157个建议——建议41:实现标准的事件模型

 建议41:实现标准的事件模型上一建议中,我们实现了一个带事件通知的文件传输类FileUploader。虽然已经满足需求,但却不符合C#的编码规范,查看EventHandler的原型声明:publicdelegatevoidEventHandler(objectsender,EventArgse);我们应该知...

【转】编写高质量代码改善C#程序的157个建议——建议40:使用event关键字为委托施加保护

 建议40:使用event关键字为委托施加保护在建议中我们实现了一个具有通知功能的文件传输类,如下:classFileUploader{publicdelegatevoidFileUploadedHandler(intprogress);publicFileUploadedHandlerFileUploade...

【转】编写高质量代码改善C#程序的157个建议——建议39:了解委托的实质

 建议39:了解委托的实质理解C#中的委托需要把握两个要点:1)委托是方法指针。2)委托是一个类,当对其进行实例化的时候,要将引用方法作为它的构造方法的参数。设想这样一个场景:在点对点文件传输过程当中,我们要设计一个文件传输类,该传输类起码要满足下面几项功能:传输问题件;按照百分制通知传输进度;传输类能够同时...

【转】编写高质量代码改善C#程序的157个建议——建议38:小心闭包中的陷阱

 建议38:小心闭包中的陷阱先看一下下面的代码,设想一下输出的是什么?staticvoidMain(string[]args){List<Action>lists=newList<Action>();for(inti=0;i<5;i++){Actiont=()=>{Cons...

【转】编写高质量代码改善C#程序的157个建议——建议37:使用Lambda表达式代替方法和匿名方法

 建议37:使用Lambda表达式代替方法和匿名方法在建议36中,我们创建了这样一个实例程序:staticvoidMain(string[]args){Func<int,int,int>add=Add;Action<string>print=Print;print(add(1,2).T...

【转】编写高质量代码改善C#程序的157个建议——建议36:使用FCL中的委托声明

 建议36:使用FCL中的委托声明 FCL中存在3类这样的委托声明,它们分别是:Action、Func、Predicate。尤其是在它们的泛型版本出来以后,已经能够满足我们在实际编码过程中的大部分需求。Action表示接受0个或多个输入参数,执行一段代码,没有任何返回值;Func表示接受0个或多个输...

【转】编写高质量代码改善C#程序的157个建议——建议35:使用default为泛型类型变量指定初始值

 建议35:使用default为泛型类型变量指定初始值 有些算法,比如泛型集合List<T>的Find算法,所查找的对象可能会是值类型,也有可能是引用类型。在这种算法内部,我们常常会为这些值类型或引用类型变量指定默认值。于是,问题来了:值类型变量的默认初始值是0值,而引用类型变量的默认初...

【转】编写高质量代码改善C#程序的157个建议——建议34:为泛型参数设定约束

 建议34:为泛型参数设定约束“约束”这个词可能会引起歧义,有些人肯能认为对泛型参数设定约束是限制参数的使用,实际情况正好相反。没有“约束”的泛型参数作用很有限,倒是“约束”让泛型参数具有了更多的行为和属性。查看下面代码,我们会发现参数t...

【转】编写高质量代码改善C#程序的157个建议——建议33:避免在泛型类型中声明静态成员

 建议33:避免在泛型类型中声明静态成员在上一建议中,已经理解了应该将MyList<int>和MyList<string>视作两个完全不同的类型,所以,不应该将MyList<T>中的静态成员理解成MyList<int>和MyList<string>共...

【转】编写高质量代码改善C#程序的157个建议——建议32:总是优先考虑泛型

 建议32:总是优先考虑泛型泛型的优点是多方面的,无论泛型类还是泛型方法都同时具备可重用性、类型安全性和高效率等特性,这是非泛型和非泛型方法无法具备的。 以可重用性为例:classMyList{privateint[]items;publicintthis[inti]{get{returnitems...

【转】编写高质量代码改善C#程序的157个建议——建议31:在LINQ查询中避免不必要的迭代

 建议31:在LINQ查询中避免不必要的迭代无论是SQL查询还是LINQ查询,搜索到结果立刻返回总比搜索完所有的结果再将结果返回的效率要高。示例代码:classMyList:IEnumerable<Person>{//为了演示需要,模拟了一个元素集合List<Person>list=n...
首页上一页12345...下一页尾页