goo*_*ate 19 .net c# generics clr object
当我约束T:对象像这样:
public interface IDoWork<T> where T : Object
{
T DoWork();
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
约束不能是特殊类'对象'
这是否意味着与编译的以下内容存在隐含的差异?
public interface IDoWork<T> // where T : Object
{
T DoWork();
}
Run Code Online (Sandbox Code Playgroud)
Dou*_*las 52
如果要将泛型类型约束为引用类型,请使用: class
.
public interface IDoWork<T> where T : class
{
T DoWork();
}
Run Code Online (Sandbox Code Playgroud)
这将禁止泛型类型为值类型,例如int
结构.
Chr*_*non 15
两个约束之间没有区别,除了不允许显式声明无用之外.
C#4.0语言规范(10.1.5类型参数约束)说明了两件事:
类型不能是对象.因为所有类型都是从对象派生的,所以如果允许这样的约束就没有效果.
...
如果T没有主要约束或类型参数约束,则其有效基类是object.
在你的评论中,你说你试图做出T
类型Void
.Void
是一种特殊类型,表示没有返回类型,不能代替使用T
,这需要适当的具体类型.如果需要,您将必须创建方法的void版本和T
版本.
归档时间: |
|
查看次数: |
20723 次 |
最近记录: |