返回C#如何创建泛......登陆

C#如何创建泛型类T的实例

高洛峰2016-11-02 16:26:21574

最近在学历基类的写法时,遇到了一个问题:如何怎么创建一个泛型类T的实例呢?    

废话不多说了,直接上代码吧,目前发现三种方法,先贴上,以后再总结,希望能帮助跟我遇到同样问题的朋友。

 

方法一,通过外部方法传入的实例来实例化:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//泛型类:

public class MySQLHelp<T>

{

       private T t;

       public MySQLHelp(T t)

        {

            this.t = t;

        }    

}

 

//测试类

public class Test{

     public static void Main(){

               MySQLHelp<Message> mm = new MySQLHelp<Message>(new Message());

     }

}

//其他类

public class Message{

 

}

方法二,通过限制泛型类的构造函数:

    限制泛型类必须带有无参构造方法:public class MySQLHelp<T> where T:new()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//泛型类:

public class MySQLHelp<T> where T:new()

{

       private T t=new T();

       public MySQLHelp()

        {

        }    

}

 

//测试类

public class Test{

     public static void Main(){

               MySQLHelp<Message> mm = new MySQLHelp<Message>();

     }

}

//其他类

public class Message{

 

}

方法三,利用微软提供的方法:

   利用微软的类:System.Activator(包含创建本地或远程对象类型的方法或获取引用的方法,翻译名:活化剂类)

创建指定泛型类型参数指定的类型的实例:System.Activator.CreateInstance<T>()

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

//泛型类:

public class MySQLHelp<T>

{

       //创建指定泛型类型参数指定的类型的实例(使用这种方法可以不对泛型类型T做限制,即不用添加:where T:new())

        private T t = System.Activator.CreateInstance<T>();

       public MySQLHelp()

        {

        }    

}

 

//测试类

public class Test{

     public static void Main(){

               MySQLHelp<Message> mm = new MySQLHelp<Message>();

     }

}

//其他类

public class Message{

 

}


最新手记推荐

• 用composer安装thinkphp框架的步骤• 省市区接口说明• 用thinkphp,后台新增栏目• 管理员添加编辑删除• 管理员添加编辑删除

全部回复(0)我要回复

暂无评论~
  • 取消回复发送