我很迷惑.在为什么在.net中引用类型的接口?据说.Net中的接口是引用类型.第一个代码片段无法编译.它说"T必须是参考类型......"
public ISomeInterface DoMagic<T>(Expression<Func<object>> action, Tuple<string, DateTime, decimal> tuple)
where T : ISomeInterface
{
Magician m = new Magician();
return m.Magic<T>(()=> action, tuple.Item3);
}
Run Code Online (Sandbox Code Playgroud)
第二个编译.
public ISomeInterface DoMagic<T>(Expression<Func<object>> action, Tuple<string, DateTime, decimal> tuple)
where T : class, ISomeInterface
{
Magician m = new Magician();
return m.Magic<T>(()=> action, tuple.Item3);
}
Run Code Online (Sandbox Code Playgroud)
如果Interfaces是引用类型,为什么第一个代码片段不能编译?
因为它是关于封装在接口内部的对象的真实类型.通过声明ISomeInterface,你没有定义必须条件:T必须是引用类型.
因为我可以:
public interface IStructInterface {
}
public struct A : IStructInterface {
}
Run Code Online (Sandbox Code Playgroud)
这是一种价值类型.
通过定义其他约束类,可以声明这是引用类型.
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |