我有interface
:
public interface ITestInterface
{
int TestInt { get; set; }
}
和这个通用方法(带有T : class
约束):
public void Test<T>() where T : class
{
// DoSomething
}
和这个电话:
Test<ITestInterface>();
并且当interface
不1>}时,所有内容都会编译并运行(或者是它?)。
为什么会这样?
我第一次在我的WCF代理类上看到了这个:
class
其中public partial class TestServiceClient:
System.ServiceModel.ClientBase<TestNamespace.ITestService>, TestNamespace.ITestService
有这个定义:
ClientBase<T>
答案 0 :(得分:9)
class
约束意味着类型必须是引用类型,不一定是类。
来自C#语言规范:
引用类型约束指定用于type参数的类型参数必须是引用类型。已知为引用类型(如下定义)的所有类类型,接口类型,委托类型,数组类型和类型参数都满足此约束条件。
基本上,这意味着该类型不能是值类型。
值类型也可以实现接口,但是将值类型转换为接口会导致值被加框
IComparable i = 0;
现在i
存储对已加框0
的引用。