where 泛型类型参数及约束

private void InsertData<TRowMetadata, TFieldMetadata, TCellMetadata>(IMetadataReader<TRowMetadata, TFieldMetadata, TCellMetadata> dataSource, Int16 planPartitionId, bool loadblankdata)
where TRowMetadata : IRowMetadata, new()
where TFieldMetadata : new()
where TCellMetadata : ICellMetadata, new()
{

}

where TRowMetadata : IRowMetadata的含义是TRowMetadata 参数必须实现接口IRowMetadata

where TCellMetadata : ICellMetadata的含义是TCellMetadata 参数必须实现接口ICellMetadata

TRowMetadata, TFieldMetadata, TCellMetadata三个参数后面的new()指的是必须具有无参数的公共构造函数

http://www.cnblogs.com/wanghonghu/archive/2012/07/11/2586920.html

时间: 2024-12-19 21:12:19

where 泛型类型参数及约束的相关文章

编写高质量代码改善C#程序的157个建议[优先考虑泛型、避免在泛型中声明静态成员、为泛型参数设定约束]

前言 泛型并不是C#语言一开始就带有的特性,而是在FCL2.0之后实现的新功能.基于泛型,我们得以将类型参数化,以便更大范围地进行代码复用.同时,它减少了泛型类及泛型方法中的转型,确保了类型安全.委托本身是一种引用类型,它保存的也是托管堆中对象的引用,只不过这个引用比较特殊,它是对方法的引用.事件本身也是委托,它是委托组,C#中提供了关键字event来对事件进行特别区分.一旦我们开始编写稍微复杂的C#代码,就肯定离不开泛型.委托和事件.本章将针对这三个方面进行说明. 这里也有一篇之前我对泛型的简

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

建议34:为泛型参数设定约束 “约束”这个词可能会引起歧义,有些人肯能认为对泛型参数设定约束是限制参数的使用,实际情况正好相反.没有“约束”的泛型参数作用很有限,倒是“约束”让泛型参数具有了更多的行为和属性. 查看下面代码,我们会发现参数t1或参数t2仅仅具有object的属性和行为,所以几乎不能再方法中对它们进行任何操作: class SalaryComputer { public int Cpmpare<T>(T t1, T t2) { return 0; } } class Salary

C# 类型参数的约束

在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上下文关键字指定的.下表列出了六种类型的约束:               约束                           说明             T:结构 类型参数必须是值类型.可以指定除 Nullable 以外的任何值类型. T:类 类型参数必须是引用类型,包括任何类.接口.委托或

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

建议45:为泛型类型参数指定逆变 逆变是指方法的参数可以是委托或者泛型接口的参数类型的基类.FCL4.0中支持逆变的常用委托有: Func<int T,out TResult> Predicate<in T> 常用委托有: IComparer<in T> 下面例子演示了泛型类型参数指定逆变所带来的好处: class Program { static void Main() { Programmer p = new Programmer { Name = "Mi

什么是泛型的主要约束和次要约束

分析问题 当一个泛型参数没有任何约束时,它可以进行的操作和运算是非常有限的,因为不能对实参做任何类型上的保证,这时候就需要用到泛型的约束.泛型的主要约束和次要约束都是指泛型的实参必须满足一定的规范,C#编译器在编译的过程中可以根据约束来检查所有泛型类型的实参并确保其满足约束条件. 一个泛型参数可以至多拥有一个主要约束,主要约束可以是一个引用类型.class或者struct.如果指定一个引用类型,则实参必须是该类型或者该类型派生类型.class规定实参必须是一个引用类型.struct规定了参数必须

VS 2012 泛型约束

本文内容 使用泛型约束的原因 未绑定的类型参数 作为约束的类型参数 参考资料 当"设计模式"出现时,人们提"用接口编程":后来,有了泛型,人们提"用泛型编程".什么泛型?比如,单链表 LinkedList 场景,每个节点包含两个字段:值和下一个节点的引用,其中,"值"既可以是 int,也可以是 string,为每个数据类型都写一个类,显然太麻烦,此时就可以使用泛型 LinkedList <T>:再如,排序算法中很常

泛型初认识

数据类型是每一个编程人员都要认真研究的知识,这篇文章就来介绍一下菜鸟了解数据类型的"心酸"历程. 从开始接触编程语言就有了数据类型,诸如integer.string.boolean.time.float.double--,慢慢地有认识了实体类型,还有就是接下来的各种集合类.不管怎么讲他们都是由object类型向下衍生出来的: 背景: ArrayList是一个使用起来非常方便的集合类,无需进行修改即可用来存储任何引用或值类型,添加到 ArrayList中的任何引用或值类型都将隐式地向上强

c# 泛型总结

一.泛型概述: 泛型是C# 2.0引入的新特性,泛型为开发者提供了类型的参数化的形式,他带来的最大的好处之一是代码的复用.他是通过运行时类型绑定来实现代码的复用,或者说算法的复用.其次,泛型为我们带来的另一个好处是性能的提升,再次,它提供了编译时类型的安全检查,为程序员减轻了负担.下面将分别通过例子来就这三个方面来做个介绍. 一.算法的复用. 下面我将举一个简单的例子,实现了一个简单的List容器,提供Add元素的方法. namespace GenericTest { public class

1.net基础之泛型

泛型的引入:微软在 .net frameWork 2.0 框架引入了泛型. 泛型的引入解决了代码重复了的问题,将公共逻辑抽象化:增加了代码的性能,泛型通过使用类型占位符预编译在实际调用时传递具体类型参数,进而减少值类型和引用类型的相互装箱 / 拆箱. 引入泛型 声明使用泛型 泛型好处对比性能 泛型类,泛型方法,泛型接口,泛型委托 泛型约束 泛型的逆变,协变  out协变covariant 修饰返回值,in 逆变 contravariant 修饰传入值 泛型缓存 泛型的声明在没有使用泛型的情况下编