System.Net.Mime.MediaTypeNames.Image
のような静的クラスを拡張するために拡張メソッドや他の手法を使用できるかどうかは、私が必要とするタイプよりも少ないタイプです。静的クラスを拡張する拡張メソッド
5
A
答えて
6
いいえ、拡張メソッドは、静的メソッド(またはプロパティ)ではなくインスタンスメソッドを追加するためにのみ使用できます。拡張メソッドは、実際に静的メソッドのまわりの構文的な砂糖です。あなたは、このようなカウント()などの拡張メソッドを使用する場合たとえば、:
var list = GetList();
var size = list.Count();
これは、実際にコンパイルされます。
var list = GetList();
var size = Enumerable.Count(list);
あなたが拡張メソッドを使用して、既存のクラスに追加の静的メソッドを追加することはできません。 。
+0
「拡張メソッドはインスタンスメソッドを追加するためにしか使用できません」と言うのは間違いですか?あなたが説明するように、彼らはインスタンスメソッドの外観を与えるだけです。実際にインスタンスメソッドではなく、クラスの非公開メンバーにアクセスできるようになります。 –
0
いいえ、これはC#ではまだ可能ではありませんが、うまくいけばそれはいつかなるでしょう。静的クラスはobject
から派生する必要があるため、静的クラスをサブクラス化して新しいメソッドを追加することはできません。あなたのコードに似たような効果をもたらす一つのことは、拡張メソッドが必要なときに代わりに使う静的クラスを宣言することだけです。例えば:
public static class MessageBox2
{
public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
{
return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
元のクラスが静的であるため、定義により「拡張」方法はthis
パラメータとしてのインスタンスを受信する必要がなく、単に元のクラスの静的メソッドを使用することができます。
関連する問題
- 1. 静的拡張メソッド
- 2. グラフの拡張子でオーバーライド静的メソッド
- 3. 変換クラスの拡張性(拡張メソッドとParitalクラス)
- 4. Java抽象メソッド拡張クラス
- 5. 拡張クラス内の拡張メソッド自体を使用して
- 6. LINQの拡張メソッド - GetYearWeekFormat拡張
- 7. 静的クラスは別のクラスを拡張しますか?
- 8. 動的に拡張JSクラス
- 9. MVC拡張メソッド
- 10. 拡張メソッドは
- 11. 拡張メソッド
- 12. NativeScript拡張メソッド
- 13. 拡張メソッドは
- 14. 拡張メソッド - デコレータパターン
- 15. ジェネリック拡張メソッド
- 16. 拡張メソッド
- 17. IsOrderedBy拡張メソッド
- 18. C# - 拡張メソッド
- 19. クラスの拡張で静的な値を使用する
- 20. 静的関数で文字列クラスを拡張する
- 21. 拡張クラス
- 22. PHPクラス拡張
- 23. デルファイ拡張クラス
- 24. C++クラス拡張
- 25. パフォーマンス:拡張バイナリイメージ(形態学的拡張)
- 26. 静的メソッド(拡張メソッド)内の匿名イベントハンドラの登録解除
- 27. HadoopのMapperを拡張するクラスを拡張する
- 28. 静的メソッドまたはインスタンスメソッドを.NETで拡張しますか?
- 29. php - 拡張クラスから静的関数を呼び出す
- 30. プロトコル拡張の静的プロパティへのアクセス
静的クラスを拡張することはできません。この質問の重複をSOで検索すると、いくつかの回避策が表示されます。 – BeemerGuy
なぜあなたはそれを必要としますか?静的クラスにはコンテキストがなく、静的クラスの内部でできることは、コード内の他の場所で行うことができます。 –
@Amby - 私はあなたが組織のプロポーザルのためだけにそれをしたいと思うかもしれないと思います。もちろん、静的なImageUtilityクラスを必要なメソッドで作成することができます(この答えによれば、彼は何とかやる必要があります)。しかしOPは彼が追加のクラスを必要としない方法でコードを整理したいと思います。残念ながら、あなたはできません。 (私は同じことをするためにここに来た)。 – MattW