2017-10-19 4 views
1

メソッドを呼び出すときに、どのようにオブジェクトを参照するのか、どのようにクラスを参照するかをどのように知っていますか?例えば: - クラスを参照メソッドを呼び出すとき、クラスを参照するとき、およびオブジェクトをいつ参照するのか?

なぜそれが

+2

拡張メソッドを宣言していない限り、 'myStr.IsNullOrEmpty();'は使用できません!あなたの意味は?あなたの質問は不明です。 –

+1

'IsNullOrEmpty'は_static_メソッドです。静的メソッドでは、クラスの名前を使用してメソッドを呼び出します。メソッドが静的でない場合は、インスタンス変数を使用してメソッドを呼び出します。あなたの例では 'IsNullOrEmpty'は静的なので' myStr.IsNullOrEmpty(); 'はコンパイルされません。 –

+0

'myStr'がnullの場合、' myStr.IsNullOrEmpty() 'は何をすると思いますか? –

答えて

2
myStr.IsNullOrEmpty(); 

方法が静的である

String.IsNullOrEmpty(myStr); 

とされません。

メソッドが静的でない場合 - インスタンス。

(ありな拡張メソッドなどの他の例がある...しかし、私は、これはあなたが探しているものだと思います。)あなたがもたらしたケースについては


:「構文」の下 the docsを参照してください。

公共静的ブールIsNullOrEmpty [重点鉱山]

1

静的メソッドは必要ありません。実行されるクラスのインスタンスであるIsNullOrEmpty()は、クラス名の前にプレフィックスを付けたものです。

いくつかの静的メソッド(拡張機能)を使用して、クラスで使用可能なメソッドを記述したり追加したりしなかったクラスを拡張できます。

例、その後if ("blablubb".IsSet()) ...またはif (StringExt.IsSet("blablubb")) ...で呼び出し可能になります

// must be a top lvl class to enable declaring extension method 
public static class StringExt 
{ 
    public static bool IsSet(this string s) 
     => s != null && s.Trim().Length > 0; 
} 

したがって、短い回答ではAPI(RTFMに短縮されることがあります)が読み取られ、署名が表示されます。

string.IsNullOrEmpty() 

には拡張メソッドは、文字列インスタンスの内部データを使用してにはdependencysを持っていないその単に静的なメソッドではありません - それは、文字列クラスのstatic宣言されました - 何かを問わず

public static bool IsNullOrEmpty(string s) 
{ 
    // look up implementation here: 
    // http://referencesource.microsoft.com/#mscorlib/system/string.cs 
} 

link to IsNullOrEmpty

1

どのようにオブジェクトを参照するのか、どのようにクラスを参照するかを知っていますか?

メソッド宣言を見てください。インスタンスメソッドが宣言されている場合(通常のメソッド)、この方法でメソッドを呼び出す必要があります。静的メソッドは、(メソッドのシグネチャはstaticキーワードが含まれています)宣言されている場合

myStr.IsNullOrEmpty(); 

あなたはこの方法でメソッドを呼び出す必要があります。Stringは、クラスの名前とIsNullOrEmptyある

String.IsNullOrEmpty(myStr); 

は、そのクラス内の静的メソッドの名前です。

静的メソッドは、拡張メソッドとして宣言されることがあります(静的メソッドの最初のパラメータには接頭辞thisというキーワードが付いています)ので、2つの同じ方法で呼び出すことができます。仮定IsNullOrEmpty

String.IsNullOrEmpty(myStr);  
myStr.IsNullOrEmpty(); 

は、拡張メソッドで、両方の構文は完全に正常に動作し、(そのような方法は、.NET Frameworkに存在しませんが、あなたがあなた自身を書くことができることに注意してください)同じですします。

関連する問題