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#高级编程(第三版) 15 16

  • 2007-08-07 17:09
  • 7.55MB
  • 下载

C#基础知识整理:基础知识(15) ICollection、迭代及泛型

1、ICollection接口     数组是.net framework定义的最基本的集合类型,除了数组,.net framework还定义了很多集合类型。打开msdn可以看到,所有集合都在Sys...

《C++ Primer 4 Answer Book》 整理[15]——第16章 模板与泛型编程

第16章   模板与泛型编程         【111】16.2编写一个函数模板,接受一个ostream引用和一个值,将该值写入流。用至少4种不同类型调用函数,通过写至cout、文件和st...

C++11(15): 模板与泛型编程

面向对象编程和泛型编程都能处理在编写程序时不知道类型的情况。不同之处:OOP能处理类型在程序运行之前都未知的情况;而泛型编程中,在编译时就能获知类型了 模板参数类别不能为空。 模板参数表示在类或函...

c++primer第十六章模板和泛型编程小结-16

第十六章---模板和泛型编程 1、泛型编程:以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。标准库的容 器、迭代器和算法都是泛型编程的例子。每种容器(...

C#成神之路<16> C#泛型

1、泛型的概念 对于泛型的概念通过程序进行讲解。 最快的一般用途的排序算法之一是Quicksort,这个算法利用分治法划分数据,然后递归调用自身来执行排序任务。 实现quickSort算法的代码...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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