zoukankan      html  css  js  c++  java
  • C#泛型编程

    例子代码:
    class Program
        {
            static void Main(string[] args)
            {
                int obj = 2;
                Test<int> test = new Test<int>(obj);
                Console.WriteLine("int:" + test.obj);
                string obj2 = "hello world";
                Test<string> test1 = new Test<string>(obj2);
                Console.WriteLine("String:" + test1.obj);
                Console.Read();
            }
        }
     
        class Test<T>
        {
            public T obj;
            public Test(T obj)
            {
                this.obj = obj;
            }
    }


    输出结果是:

        int:2

    String:hello world

    C#泛型继承:

    C#除了可以单独声明泛型类型(包括类与结构)外,也可以在基类中包含泛型类型的声明。但基类如果是泛型类,它的类型要么以实例化,要么来源于子类(同样是泛型类型)声明的类型参数,看如下类型

    class C<U,V>

    class D:C<string,int>

    class E<U,V>:C<U,V>

    class F<U,V>:C<string,int>

    class G:C<U,V>  //非法

    E类型为C类型提供了U、V,也就是上面说的来源于子类

    F类型继承于C<string,int>,个人认为可以看成F继承一个非泛型的类

    G类型为非法的,因为G类型不是泛型,C是泛型,G无法给C提供泛型的实例化

    泛型类型的成员:

    泛型类型的成员可以使用泛型类型声明中的类型参数。但类型参数如果没有任何约束,则只能在该类型上使用从System.Object继承的公有成员。如下图:

     

    泛型接口:

    泛型接口的类型参数要么已实例化,要么来源于实现类声明的类型参数

    泛型委托:

    泛型委托支持在委托返回值和参数上应用参数类型,这些参数类型同样可以附带合法的约束

    delegate bool MyDelegate<T>(T value);

    class MyClass

    {

        static bool F(int i){...}

        static bool G(string s){...}

        static voidMain()

        {

            MyDelegate<string> p2 = G;

            MyDelegate<int> p1 = new MyDelegate<int>(F);

        }

    }

  • 相关阅读:
    Linux显示2015年日历表
    Linux显示系统日期
    Dialogs 对话框
    grid 属性
    VS2010 fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 嵌入清单
    Perl Tk grid 布局
    Perl Tk pack布局示例
    Perl Tk grid布局管理器
    Perl DBI模块
    输入文本框模型
  • 原文地址:https://www.cnblogs.com/wangchuang/p/2512145.html
Copyright © 2011-2022 走看看