ずっと前に読んだことを覚えていると思いますが、C#3では、拡張メソッドはプリミティブ型とインターフェイスにしか適用できませんでした。また、C#4では、任意のタイプを拡張するために使用できます。これは私が今見ているものと一致するように継ぎ目がなく、私はこれが文書化されているのを見つけるのが難しいと感じています。
これに真実はありますか、それとも私の記憶はそれをすべて作り上げましたか?
どのタイプを拡張できるかに関するルールは何ですか?
C#3と4の間に違いはありますか?
ずっと前に読んだことを覚えていると思いますが、C#3では、拡張メソッドはプリミティブ型とインターフェイスにしか適用できませんでした。また、C#4では、任意のタイプを拡張するために使用できます。これは私が今見ているものと一致するように継ぎ目がなく、私はこれが文書化されているのを見つけるのが難しいと感じています。
これに真実はありますか、それとも私の記憶はそれをすべて作り上げましたか?
どのタイプを拡張できるかに関するルールは何ですか?
C#3と4の間に違いはありますか?
これに真実はありますか?
いいえ。
どのタイプを拡張できるかに関するルールは何ですか?
呼び出しのルールは、C#4仕様のセクション7.6.5.2にあります。宣言の規則はセクション10.6.9にあります。
特定の質問に答えるには:アンマネージポインタ型は拡張されない場合があります。
C#3と4の間に違いはありますか?
はい。C#4では、「動的」を処理するためのルールが追加されています。拡張メソッドは動的に解決されません。あなたが持っている場合
dynamic d = 10;
d.MyIntExtension();
その場合、動的言語ランタイムはintで拡張メソッドを見つけられません。見る
詳細については。
あなたはそれを作りました!私の知る限り、C#3とC#4の間でルールに変更はありません。
(そして、関連する仕様書の大まかな比較はこれを確認しているようです。)
これに真実はありますか、それとも私の記憶はそれをすべて作り上げましたか?
あなたはそれを作りました。拡張メソッドは常にで使用されてきましたIEnumerable<T>
。
これはFx3.5(C#3)のMSDNリンクです。2番目の例はSystem.Stringの拡張であり、Stringはプリミティブ型ではありません。