この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 17968|答える: 0

[出典] C# ここでの使用分析

[リンクをコピー]
掲載地 2016/07/12 11:35:43 | | |

where節は、ジェネリック宣言で定義された型パラメータの変数として機能する型制約を指定するために使われます。
1. インターフェース制約。
例えば、ジェネリッククラスMyGenericClassを宣言すれば、型パラメータTがIComparableインターフェースを実装できます<T>。

publicクラス<T>MyGenericClassで、ここでT:IComparable { }

2. 基底クラス制約:型が指定されたクラスを基底クラス(またはクラス自体)として使用しなければ、そのジェネリック型の型パラメータとして使用できないことを示します。
そのような制約が使用されると、そのパラメータ型に関する他のすべての制約の前に現れなければなりません。
クラスのMyClassy<T、U>
ここで T : クラス
ここで U : struct
{
}

3.where節はコンストラクタ制約も含めることができます。
新しい演算子を使って型パラメータのインスタンスを作成できます。 しかし、型引数はこのためにコンストラクタ制約 new() によって制約されなければなりません。 new()制約は、提供される任意の引数がアクセス可能なパラメータレス(またはデフォルト)のコンストラクタを持つ必要があることをコンパイラに知らせます。 例えば:
public class MyGenericClass <T> で T: IComparable, new()
{
次の線はnew()制約なしには不可能です:
T項目 = 新しいT();
}
new()制約はwhere節の末尾に現れます。

4. 複数の型パラメータの場合、各型パラメータはここで節を使用します。
例えば:
インターフェース MyI { }
クラス辞書<TKey,TVal>
ここでTKey:IComparable、IEnumerable
ここでTVal:MyI
{
パブリック・ヴォイド Add(TKeyキー、TVal val)
{
}
}

5. また、ジェネリックメソッドの型パラメータに制約を付けることも可能です。例えば:

public bool MyMethod<T>(T t) where T : IMyInterface { }

型パラメータ制約の記述構文は、デリゲートとメソッドの両方で同じであることに注意してください:

delegate T MyDelegate<T>() ここで T : new()





ジェネリック Where

Generic ここで型パラメータを限定できます。 いくつかの方法があります。

ここで T : struct は TがSystem.ValueTypeから継承すべき型パラメータを制限します。

ここで T: クラスは型を制限します。パラメータ T は参照型でなければならず、System.ValueType から継承することはできません。

ここで T : new() は型パラメータを制限します。T はデフォルトのコンストラクタを持たなければなりません。

・ここで T : NameOfClass は、T がクラスから継承するかインターフェースを実装すべき型パラメータを制限します。

これらの修飾子は組み合わせることができます。例えば、パブリッククラス 点 ここで T : クラス、IComparable、new()




先の:c# H ベッド ヘルプクラス
次に:c# httpはHttpListenerでスレッドを聴取します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com