博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 泛型类(函数)的实例化
阅读量:5341 次
发布时间:2019-06-15

本文共 903 字,大约阅读时间需要 3 分钟。

泛型可以用于类,也可以用于函数。如

泛型类:

public class MyClass<T>

{
    public T MyElement { get; set; }
}

泛型函数:

public T ReturnElement<T>()

{
    throw new NotImplementedException();
}

 

但是当需要对MyElement进行实例化的时候,却不能使用new(),只要添加如下代码即可进行实例化了:

泛型类:

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

{
    public T MyElement { get; set; }
    public MyClass()
    {
        this.MyElement = new T();
    }
}

泛型函数:

public T ReturnElement<T>() where T : new()

{
    return new T();
}

 

在这里,where实际上对泛型类型T的一个限定或补充。如果你希望T是一个int的集合,这个集合可以是List<int>,也可以是HashSet<int>等等,只要它们都是从ICollection继承而来的,则可以添加对类型T的限定,同时要保证它还是可以实例化的:

public T ReturnElement<T>()

    where T : ICollection<int>, new()
{
    return new T();
}

 

进一步,如果希望放宽集合中元素的类型,比如只要是int,double等可比较的类型,它们都是从IComparable继承而来,则可以继续添加如下限定:

public T ReturnElement<T, S>()

    where T : ICollection<S>, new()
    where S : IComparable
{
    return new T();
}

C# 的泛型类型提供了很方便的机制,非常方便地就能举一反三。

转载于:https://www.cnblogs.com/ustcwhc/archive/2012/01/17/2324624.html

你可能感兴趣的文章
20155210 实验一 逆向与Bof基础
查看>>
20个有用的正则表达式
查看>>
PTA 02-线性结构3 Reversing Linked List (25分)
查看>>
.Net开源框架列表【转载】
查看>>
(转)Linux内核之进程和系统调用
查看>>
C#如何计算代码执行时间
查看>>
项目更新到公网服务器的操作步骤
查看>>
js练习- 给你一个对象,求有几层
查看>>
阿里前端一面
查看>>
Android 软键盘的显示和隐藏,这样操作就对了
查看>>
【DP+拓扑】关键子工程
查看>>
Jenkins创建job时Check-out Strategy各个选项详细说明(含图)
查看>>
js android页面被挂起问题解决
查看>>
1-4-13:分段函数
查看>>
DAL 层引用 System.Net.Http ,引发的一阵心慌
查看>>
写在最前面的话
查看>>
C语言计算字符串子串出现的次数
查看>>
Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
ios录音Demo
查看>>
2019年第十届蓝桥杯省赛总结(JavaA组)
查看>>