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 次 |
| 最近记录: |