记录的派生约束使用了一个where T :子句,我正在修改的示例代码是
public class TwoThingsIPC<T> where T : IPassClass
{ ...
}
Run Code Online (Sandbox Code Playgroud)
其中IPassClass是一个接口.
我使用的第三方代码具有格式
public class TwoThingsIPC<IPassClass>
{ ...
}
Run Code Online (Sandbox Code Playgroud)
两者都会在我的代码中产生相同的行为,但它们是否相同,如果没有,有什么区别?
他们不一样.第二项声明具有误导性:
public class TwoThingsIPC<IPassClass>
{ ...
}
Run Code Online (Sandbox Code Playgroud)
并没有限制类型的IPassClass接口.它对泛型参数使用了较差的名称选择.没有什么能阻止你创建一个实例TwoThingsIPC<int>- IPassClass类的代码中的引用只会被"替换" int.1
另一方面,类型的变量TwoThingsIPC<IPassClass>,例如:
TwoThingsIPC<IPassClass> myVar = new TwoThingsIPC<IPassClass>();
Run Code Online (Sandbox Code Playgroud)
确实将类型约束到IPassClass接口.
1这不是真正发生的事情,但我还没有更好的解释.
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |