それとリストまたは配列を受け取るメソッドを作成することの違いは何ですか?
の違い
void M(params int[] x)
そして
void N(int[] x)
Mは次のように呼び出されるということです:
M(1, 2, 3)
またはこのように:
M(new int[] { 1, 2, 3 });
しかし、Nは最初の方法ではなく、2番目の方法でのみ呼び出すことができます。
おそらくそれはパフォーマンスに何らかの影響を与えますか?
パフォーマンスへの影響M
は、最初の方法で呼び出すか、2番目の方法で呼び出すか、どちらの方法で配列を作成するかです。アレイを作成すると、時間とメモリの両方が必要になるため、パフォーマンスに影響があります。パフォーマンスへの影響は、パフォーマンスの目標に対して測定する必要があることに注意してください。追加のアレイを作成するコストが、市場での成功と失敗の違いであるゲーティング要因であるとは考えられません。
無制限のパラメーターを使用する方法をどのように選択すればよいのか、完全に理解または確認していません。
これは、メソッドを呼び出すコードの作成者にとって純粋かつ完全に便利です。それは単に短くて書くのが簡単です
M(1, 2, 3);
書く代わりに
M(new int[] { 1, 2, 3 });
発信者側のいくつかのキーストロークを節約するだけです。以上です。
尋ねなかったが、おそらくその答えを知りたいいくつかの質問:
この機能は何と呼ばれていますか?
呼び出し側で可変数の引数を渡すことができるメソッドは、可変引数と呼ばれます。Paramsメソッドは、C#が可変メソッドを実装する方法です。
オーバーロードの解決は、可変長メソッドでどのように機能しますか?
過負荷の解決の問題に直面した場合、C#は「通常の」フォームと「拡張された」フォームの両方を考慮します。両方が当てはまる場合、「通常の」フォームが常に優先されます。たとえば、次のことを考慮してください。
void P(params object[] x){}
そして、私たちは電話をしています
P(null);
2つの適用可能な可能性があります。「通常の」形式ではP
、配列のnull参照を呼び出して渡します。「拡張された」形式では、と呼びますP(new object[] { null })
。この場合、通常の形式が優先されます。呼び出しがあった場合P(null, null)
、通常のフォームは適用できず、拡張されたフォームがデフォルトで優先されます。
課題:私たちがvar s = new[] { "hello" };
電話しているとしますP(s);
。呼び出しサイトで何が発生し、その理由を説明してください。びっくりするかも!
課題:との両方があるvoid P(object x){}
としvoid P(params object[] x){}
ます。何をするのP(null)
か、そしてその理由は?
課題:との両方があるvoid M(string x){}
としvoid M(params string[] x){}
ます。何をするのM(null)
か、そしてその理由は?これは前のケースとどう違うのですか?