Closed TokugawaTakeshi closed 1 year ago
拡張メソッドは、拡張する型にメソッドを加える手法です。 今回の場合はstring型にIsNonEmptyメソッドを追加するので、使い方は
string message = "文字";
bool result = message.IsNonEmpty();
というような使い方になります。
String.IsNonEmpty("テスト")の「String」部分は インスタンスではなく静的クラスなので、拡張メソッド的な呼び出し方をすると
bool result = "テスト".IsNonEmpty();
になります。
@gummoni
説明、ありがとう。
済みません、良く理解できなかったのですが、どうやって実装すれば、String.IsNonEmpty()
が呼び出せるようになりますか?
この課題だと、message.IsNonEmpty()
や"テスト".IsNonEmpty()
ではなく、String.IsNonEmpty()
という使い方の実装は目的です。
①拡張メソッドは、インスタンスに対してメソッドを追加するもので、 Stringクラスに新しいメソッドを追加する事は現在のC#仕様では行えない状況です。
public static class StringExtensions
{
public static bool IsNonEmpty(this string self)
{
return !String.IsNullOrEmpty(self);
}
}
//この拡張メソッドは、stringインスタンス経由で利用可能です。
string message = "sample";
message.IsNonEmpty(); //拡張メソッド利用パターン
//------------------------------------------------------------------------------------
//②既存クラスStringにメソッドを追加することは現在のC#仕様では記述できません。
String.IsNonEmpty("sample"); //この書き方はNot OK
//------------------------------------------------------------------------------------
//③上記のような書き方をするには新たなクラスを用意する必要があります。
public static class StringEx {
public static bool IsNonEmpty(this string self)
{
return !String.IsNullOrEmpty(self);
}
}
StringEx.IsNonEmpty("sample"); //この書き方はOK
上記、承知しました。 ありがとう。
Stringクラスの拡張静的メソッドを追加したいと思います。
だと、実装のところに「static」があっても、実は非静的メソッドの実装であり、
String.IsNonEmpty()
の様に呼び出す事ができません。String.IsNonEmpty("テスト")
の様に呼び出せる様になるには、どうすれば良いですか?とこで、
の場合、
Label.IsNonEmpty()
を呼び出してみると、と言われますから、
IsNonEmpty
を静的にしないといけません。 どちらにせよ、静的拡張メソッドを追加出来る様になりたいです。