什么是KeyWord这个代码中的“Where”?

时间:2013-01-16 17:04:32

标签: c#-4.0

我在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);
            }


        }

5 个答案:

答案 0 :(得分:3)

where被称为约束。它可确保您的类型参数E派生自AbstractEntity。如果在where之后指定了接口,E将需要实现该接口。

答案 1 :(得分:0)

其中是限制E

的允许类型的约束

http://msdn.microsoft.com/en-us/library/d5x73970(v=vs.80).aspx

答案 2 :(得分:0)

这是generic type contstraint

它的作用是要求调用此方法的泛型类型满足限制:

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子句所在的位置。