Fileクラスの拡張メソッドを作成しようとすると、クラスが静的であるため、これを実行できないというエラーが表示されます。しかし、なぜこれが拡張メソッドの作成を停止するのかわかりません。どのような意味がありますか?
ありがとう
Fileクラスの拡張メソッドを作成しようとすると、クラスが静的であるため、これを実行できないというエラーが表示されます。しかし、なぜこれが拡張メソッドの作成を停止するのかわかりません。どのような意味がありますか?
ありがとう
拡張メソッドは、オブジェクトのインスタンスで呼び出されます。
myObj.ExtensionMethod();
静的クラスがある場合、そのインスタンスを持つことはできません。したがって、extensionメソッドを呼び出すものは何もありません。
逆に言えば、拡張メソッドの定義を見ると、最初のパラメーターは常に、this
キーワードによって証明されるように呼び出されるオブジェクトのインスタンスです。論理的には、インスタンスが存在しないため、この動作は静的クラスでは機能しません。
拡張メソッドのサンプル-最初のパラメータを参照してください
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
設計による拡張メソッドは、クラスのインスタンスを取得する必要があるため、最初のパラメーターとして拡張しています。また、Fileのインスタンスは静的クラスであり、インスタンスを持つことができないため、明らかに渡すことはできません。
静的クラスの拡張メソッドを作成できないのはなぜですか?
C#開発チームはその機能を(まだ)実装していなかったためです。ただし、 F#はそれを実装することを選択しました。
拡張プロパティについても同じです。F#にはそれらがあり、Booには(少なくとも)2006年以来それらがあります。