C#泛型编程指导原则(15--16)

原创 2007年09月14日 19:13:00

Item 15: Select the Least Restrictive Constraints选择最少限制的约束

在给类型参数选择约束条件的时候,最好只加入最少的限制,不要加入不必要的附加限制。下面是一个约束过头的例子。

public interface IPerson

 {

void Validate();

}

public interface ICustomer : IPerson { }

public interface IEmployee : IPerson { }

public class TestClass<T> where T : ICustomer

 {

public TestClass(T val)

{

val.Validate();

}

}

这个例子中有一个接口的继承。对TestClass<T>的约束是可行的,但是,但也过分的限制了参数的类型。因为这里需要的约束是Validate(),而它是IPerson的一部分,所以你应该使用IPerson作为约束条件。

Item 16: Don’t Impose Hidden Constraints不要强加隐式的约束条件

即使你的类型没有在声明的时候包含任何约束,这并不意味着你的类型不能在实现中强加隐式的约束。可以想象,通过强制转换或者调用GetType()方法,可以在泛型类型中生成建立于类型参数的代码,在这样的情况下,你仍然对类型参数强加了非直接的约束仅仅是没有显式的声明而已。

这种隐式的约束当然是约束,同时是糟糕的主意。

 

C# 之泛型详解

--转载于C# 之泛型详解 什么是泛型        我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办...
  • taoerchun
  • taoerchun
  • 2016年05月11日 18:23
  • 1096

C#list<T>泛型集合习题

在做了前面的演练7-3之后,我以为后面的习题应该问题不大,依样画葫芦也能弄出来,结果说明,我想多了,两个不容的控件完全不能一概而论。前面用的时DataGirdView,后面则是的listview。对于...
  • hgy139
  • hgy139
  • 2015年05月15日 13:19
  • 259

C# 泛型理解之大白话

泛型:泛就是多,许多,很多的意思;型:就是类型,比如:int、float、double等等的数据类型;连接起来就是许多不同的数据类型,包括内置数据类型:就是系统自带,定义好的;自定义类型:就是自己定义...
  • Rose_Girls
  • Rose_Girls
  • 2015年10月09日 23:35
  • 1237

c#泛型使用详解:泛型特点、泛型继承、泛型接口、泛型委托

泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用。在.NET类库中处处都可以看到泛型的身影,尤其是数组和集合中,泛型的存在也大大提高了程序员...
  • zdhlwt2008
  • zdhlwt2008
  • 2016年04月29日 09:28
  • 4095

C#三十二 泛型的理解和使用

日常生活中的事物都是有类型的,比如我们说“一个女人”,那么“女”就是这个人的类型。我们可以说“女人都是水做的”,那么听者都知道这是在说“女”这种类型的人。再比如你去肉店买肉,你可以对老板说“我要十斤猪...
  • zhangchen124
  • zhangchen124
  • 2016年05月11日 21:52
  • 5051

C#学习日记30---泛型类、泛型方法、泛型委托

泛型允许您延迟编写类或方法中的编程元素的数据类型的规范,直到实际在程序中使用它的时候。换句话说,在声明类或方法的时候由于不知道用户要传入什么样类型的参数,所以在传入类型的地方“挖一个坑(“<T>”)"...
  • HC666
  • HC666
  • 2015年10月23日 21:57
  • 3242

浅谈Java和C#泛型及C++模板

最近偶然接触到了类型擦除(TypeErasure)这个概念。通过查了一些资料才知道Java和C#的泛型是有一些区别的,当然与C++的模板也不一样。因此做了如下整理。 泛型的本质就是让你的类型能够拥有...
  • jackliu91
  • jackliu91
  • 2014年11月24日 18:29
  • 1123

如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法??

如何通过C#.NET中的反射机制来创建C#.NET泛型类的实例,并调用其方法?
  • phker
  • phker
  • 2016年06月21日 08:37
  • 1112

C#和java中泛型的本质区别

转自: 为什么JVM上没有C#语言?浅谈Type Erasure特性 每次提到语言的时候我总是忍不住骂Java是一门生产力低下,固步自封的语言——这估计要一直等到Java语言被JVM上...
  • u012780317
  • u012780317
  • 2016年06月17日 11:46
  • 939

C#泛型好处知多少

1.性能 性能是泛型的一个主要优点。 直接上例子,通过实例可以让我们很好的理解这一点。 Stopwatch stopwatch = new Stopwatch(); stopwatch.Start()...
  • tiana0
  • tiana0
  • 2013年09月01日 12:00
  • 2946
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#泛型编程指导原则(15--16)
举报原因:
原因补充:

(最多只允许输入30个字)