我在c#中乞讨。 什么是所有这类课程中的“哪里”? 为什么我在代码中使用“where”? Where Keyword有什么好处?
public abstract class AbstractEntity
{
}
public abstract class AbstractControl<E> where E: AbstractEntity
{
public abstract void Add(E entity);
public abstract void Modify(E entity);
public abstract void Remove(E entity);
}
public abstract class AbstractSQLServerControl<E> : AbstractControl<E> where E : AbstractEntity
{
protected SQLServerConnectionManager connectionManager;
public AbstractSQLServerControl(string connectionString)
{
connectionManager = new SQLServerConnectionManager(connectionString);
}
}
答案 0 :(得分:3)
where
被称为约束。它可确保您的类型参数E
派生自AbstractEntity
。如果在where
之后指定了接口,E
将需要实现该接口。
答案 1 :(得分:0)
其中是限制E
的允许类型的约束http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx
答案 2 :(得分:0)
它的作用是要求调用此方法的泛型类型满足限制:
void temp(T stuff)其中T:class
表示T必须是一个类。编译器不允许您调用'temp&lt; int&gt;(42)'
答案 3 :(得分:0)
Where
指定类型参数E
需要是AbstractEntity
的衍生物。我建议你看一下关于泛型的http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx
答案 4 :(得分:0)
这是泛型的约束,请参阅MSDN。在您的问题中,where
子句声明泛型类型E
必须是AbstractEntity
类型的派生类型。
从本质上讲,泛型是实现动态类型的一些好处的一种方式,具有静态类型的优点。根据实际考虑,没有任何约束的泛型有时太宽松或宽泛,我们需要在编译时强制执行某些类型限制,这就是where
子句所在的位置。