这是我的通用方法代码:
public static IT Activate<IT>(string path)
{
//some code here....
}
我想设置通用 IT 必须只是一个接口。
这可能吗?
这是我的通用方法代码:
public static IT Activate<IT>(string path)
{
//some code here....
}
我想设置通用 IT 必须只是一个接口。
这可能吗?
不,C# 或一般的 .NET 泛型中没有这样的约束。您必须在执行时检查。
if (!typeof(IT).IsInterface)
{
// Presumably throw an exception
}
不,您不能IT
单独限制任何接口类型和接口。最接近的是class
约束,它适用to any class, interface, delegate, or array type.
- http://msdn.microsoft.com/en-us/library/d5x73970.aspx
我能想到的最接近的事情是静态构造函数中的运行时检查。像这样:
static MyClass<IT>()
{
if(!typeof(IT).IsInterface)
{
throw new WhateverException("Oi, only use interfaces.");
}
}
希望使用静态构造器意味着它会很快失败,因此开发人员会更快地发现错误。
此外,检查只会对每种类型的 IT 运行一次,而不是每个方法调用。所以不会受到性能影响。
我刚刚对基本接口的使用进行了快速测试。这是可能的,但正如我所说,不确定这是否值得努力,或者即使这是一种好的做法。
public interface IBaseInterface
{
}
public interface IInterface1 : IBaseInterface
{
//some code here....
}
public interface IInterface2
{
//some code here....
}
public class Class1
{
public void Test()
{
Activate<IInterface1>("myPath");
//Activate<IInterface2>("myPath"); ==> doesn't compile
}
public static IT Activate<IT>(string path) where IT : IBaseInterface
{
//some code here....
}
}