-1

私はc#で物乞いをしています。このクラスの「どこ」とはどういう意味ですか?コードの「どこ」で使用されるのはなぜですか?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がから派生していることを確認しますAbstractEntitywhereの後にインターフェイスが指定されている場合は、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)ここで、T:クラス

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であるか、型から派生している必要があることを宣言していAbstractEntityます。

本質的に、ジェネリックスは、静的型付けの利点とともに動的型付けの利点のいくつかを達成する1つの方法です。実用上の考慮事項によっては、制約のないジェネリックが緩すぎたり広すぎたりすることがあります。コンパイル時に型制限を適用する必要があります。そこでwhere句が登場します。

于 2013-01-16T17:07:07.390 に答える