zoukankan      html  css  js  c++  java
  • C#

    定义泛型类

    创建泛型类,在类定义中包含尖括号语法

    class MyGenericClass<T>

    {

    ...

    }

    T可以是任意标识符,只要遵循通常的C#命名规则即可。泛型类可以在其定义中包含多个类型,用逗号分隔开

    class MyGenericClass<T1, T2, T3>

    {

    ...
    }

    定义了这些类型后,就可以在类定义中像使用其他类型那样使用它们。

    如果把构造函数改为 innerT1Object = new T1();编译会出错,因为当前不知道T1是什么,也不能使用它的构造函数,甚至可能没有构造函数。

    default关键字

    如果像这样赋值innerT1Object = null;编译会出错,因为此时不知道此类型是值类型还是引用类型那么可以用default关键字解决这个问题。

    innerT1Object = default(T1) 如果innerT1Object是引用类型,就给它赋予null值,如果它是值类型,就给它赋予相应的默认值。

    约束类型

    前面用于泛型类的类型称为无绑定类型,因为没有对它们进行任何约束。而通过约束类型,可以限制可用于实例化泛型类的类型。可以把类型限制为继承自某个类型。

    在类定义中,可以使用where关键字来实现。

    class MyGenericClass<T1, T2>: MyBaseClass, IMyInterface

    where T1 : constraint1 where T2 : constraint2

    {

    ...

    }

    如果new() (类型必须有一个公共的无参构造函数)用作约束,它就必须是为类型指定的最后一个约束。

    可以通过base-class约束,把一个类型参数用作另一个类型参数约束。

    class MyGenericClass<T1, T2> where T2 : T1

    {

    ...

    }

    T2必须与类型T1的类型相同,或者继承自T1。这称之为裸类型约束。类型约束不能循环。

  • 相关阅读:
    SOJ 1035 DNA matching
    SOJ 1027 MJ,Nowhere to Hide
    SOJ 1021 Couples
    SOJ 1020 Big Integer
    C#中正则表达式的简单使用
    根据HTTP header收集客户端相关信息 --- tornado demo
    IIS7配置Gzip压缩
    网站性能工具Yslow的使用方法
    配置ETags
    细说ETags以及如何在 IIS6和 IIS7下取消ETags
  • 原文地址:https://www.cnblogs.com/lilideng/p/CSharp_Generic.html
Copyright © 2011-2022 走看看