C#泛型编程指导原则(17--18)

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

Item 17: Avoid Multiple Constraint Ambiguity避免多重约束中的含糊

当使用约束的时候,可以选择对任何一个类型参数使用多重约束。事实上,你可以将单独的类约束与多重接口约束联合使用。当你开始混合并匹配多重约束的时候,可能引入含糊不清的约束。

如:

public interface I

{

void Foo1();

void Foo3();

}

public class C

{

public void Foo1() {}

}

public class TestClass<T> where T : C, I { }

这里接口I和类C中的Foo1产生了混淆。

Item 18: Provide Parameterless Constructors提供无参构造器

无论何时,当你引入自定义类型的时候,都需要考虑当他们被用作类型参数的时候会产生什么样的行为。显然,你选择实现的接口会在该类型如何被约束方面起关键性的作用。至少,准备用为类型参数的每个类型都应该包含对参数构造的支持。通过支持这个约束,使得你的类型可以被任何包含构造约束的泛型类型所支持。

通过支持无参数的构造器来增加你的接口的价值的实例足够多,不过是对于泛型还是非泛型解决方案。如果你曾经和工厂模式的任何一种变形打过交道,你可能已经提供过无参构造器。有了泛型,该条款可以增加价值的场景的列表只会变得更长。

例如:

public IEnumerable<T> GetDataObjects() where T : new() {}

 

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
  • 4091

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
  • 937

C#泛型好处知多少

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

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