c#2.0的新功能(一):泛型类

    技术2022-05-11  36

    一、定义

    public class Stack<T>

    {

            T[] m_Items;

            public void Push(T item){... }

            public T Pop(){...}

           public Stack(){...}

    二、使用

    Stact<int> stack = new Stack()<int>();

    stack.Push(1);

    stack.Push(2);

    //stack.Pust("sss");会出错

    int number = stack.Pop();

    三、好处

    1、性能高

    2、类型安全

    3、可重用

    四、在编译泛型类时只是一个占位符,在实例化时会替换为特定的类型。

    五、结构体中使用泛型

    public struct Point<T>

    {

               T           x;

               T           y;

    }

    使用:

    Point <int> point;

    point.X =1; point.Y =1;

     六、使用默认值,值类型是0,引用类型是null

    T  t = default(T);

    七、使用多个也是可以的 public class Nodes<K,T>

    另外一个使用Nodes的类LinkedList也必须使用泛型。public class LinkedList<K,T>

    使用别名using List = LinkedList<int,string>;就可以使用List list = new List()进行实例化了。

    八、泛型约束

    1、派生约束,指定参数必须从什么类和接口派生。

    比如在查找时要比较,必须有Icomparable约束。

    public class Nodes<K,T> where K:IComparable,另外也可以用where K:IComparable<K>,防止装箱。

    具体语法是:public class class名称<参数1,参数2,...> where 参数1:类,接口1,接口2  where 参数2:...

    2、构造函数约束,表示参数必须有构造函数。

    public class Nodes<K,T> where T:new()

    其中Nodes中使用new T()时必须有构造函数约束。

    3、引用/值约束

    public class Nodes<K,T> where T:struct //值类型

    public class Nodes<K,T> where T:class//引用类型

    以上的约束的可以共存,但是有些不能共存。太多了,反正会出错,就不写了。

    顺序是: where 参数1:引用/值约束,派生约束,构造函数约束。


    最新回复(0)