现在的位置: 首页 > 综合 > 正文

C# 2.0中的 “泛型”的“类型参数”

2013年10月14日 ⁄ 综合 ⁄ 共 1579字 ⁄ 字号 评论关闭

C# 2.0 中多了泛型,我只知道像这样用:
List<类名> ……,只想用它来替代ArrayList集合类而已,例如:
public List<Person> GetPersonList(){……}

前不久看到这种用法:
public T GetBo<T>(int ssid,T defaultValue){}

咋回事,看不懂,现在想更深入应用一下,都不知如何下手,如何查询,它叫什么名字?输个尖括号msdn和google好像不怎么理会,输个“泛型”好像又太泛了,什么资料都查不到,输个T来查询什么鬼东西都查不到……

突然看到xml注释中有一行“/// <typeparam name="T"></typeparam>”,再查查“typeparam”,“类型参数”!

查查msdn:
http://msdn.microsoft.com/zh-cn/library/d5x73970(VS.80).aspx
http://msdn.microsoft.com/zh-cn/library/0zk36dx2(VS.80).aspx

MSDN >> MSDN Library >> 开发工具和语言 >> Visual Studio 2005 >> Visual Studio 文档 >> Visual C# >> C# 编程指南 >> 泛型 >> 类型参数的约束

“泛型类型参数”

泛型类型参数(C# 编程指南)

在泛型类型或方法定义中,类型参数是客户端在实例化泛型类型的变量时指定的特定类型的占位符。泛型类(如泛型介绍(C# 编程指南)中列出的GenericList<T>)不可以像这样使用,因为它实际上并不是一个类型,而更像是一个类型的蓝图。若要使用 GenericList<T>,客户端代码必须通过指定尖括号中的类型参数来声明和实例化构造类型。此特定类的类型参数可以是编译器识别的任何类型。可以创建任意数目的构造类型实例,每个实例使用不同的类型参数,如下所示:
GenericList<float> list1 = new GenericList<float>();
GenericList<ExampleClass> list2 = new GenericList<ExampleClass>();
GenericList<ExampleStruct> list3 = new GenericList<ExampleStruct>();

在每个 GenericList<T> 实例中,类中出现的每个 T 都会在运行时替换为相应的类型参数。通过这种替换方式,我们使用一个类定义创建了三个独立的类型安全的有效对象。有关 CLR 如何执行此替换的更多信息,请参见运行库中的泛型(C# 编程指南)

  类型参数命名准则

  • 务必使用描述性名称命名泛型类型参数,除非单个字母名称完全可以让人了解它表示的含义,而描述性名称不会有更多的意义。
    public interface ISessionChannel<TSession> { /*...*/ }
    public delegate TOutput Converter<TInput, TOutput>(TInput from);
    public class List<T> { /*...*/ }

  • 考虑使用 T 作为具有单个字母类型参数的类型的类型参数名。
    public int IComparer<T>() { return 0; }
    public delegate bool Predicate<T>(T item);
    public struct Nullable<T> where T : struct { /*...*/ }

  • 务必将“T”作为描述性类型参数名的前缀。
    public interface ISessionChannel<TSession>
    {
        TSession Session { get; }
    }

  • 考虑在参数名中指示对此类型参数的约束。例如,可以将带有 ISession 约束的参数命名为 TSession

 

还有很多没懂,特别是where约束,以后再学。

抱歉!评论已关闭.