-1

我在 c# 中乞求。在所有这堂课中,“哪里”是什么意思?为什么我在代码中使用“where”?Where关键字有什么好处?

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


        }
4

5 回答 5

3

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

于 2013-01-16T17:06:41.087 回答
0

其中是限制 E 的允许类型的约束

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

于 2013-01-16T17:06:14.853 回答
0

它是一个泛型类型约束

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

void temp(T stuff) where T : class

意味着 T 必须是一个类。编译器不允许您调用 'temp<int>(42)'

于 2013-01-16T17:06:33.607 回答
0

Where在您的情况下,指定类型参数E需要是AbstractEntity. 我建议你看看http://msdn.microsoft.com/en-us/library/ms379564(v=vs.80).aspx关于泛型

于 2013-01-16T17:07:02.437 回答
0

这是泛型的约束,请参考MSDN。在您的问题中,where子句声明泛型类型E必须属于或派生自 type AbstractEntity

从本质上讲,泛型是实现动态类型的一些好处的一种方式,同时具有静态类型的优点。根据实际考虑,没有任何约束的泛型有时过于松散或宽泛,我们需要在编译时强制执行一些类型限制,这就是该where子句的用武之地。

于 2013-01-16T17:07:07.390 回答