かなり簡単です。MSDN は、ref を使用できると述べていますが、部分メソッドには out を使用できません。理由が知りたいのですが?コードがコンパイルされるとパーシャルがマージされるというのが私の理解でした。partial
コード ファイルを整理して整理する (つまり、見栄えを良くする) 以上のことはありますか?
参照: MSDN の記事- 「部分メソッドにはrefを指定できますが、 outパラメーターは指定できません。」
かなり簡単です。MSDN は、ref を使用できると述べていますが、部分メソッドには out を使用できません。理由が知りたいのですが?コードがコンパイルされるとパーシャルがマージされるというのが私の理解でした。partial
コード ファイルを整理して整理する (つまり、見栄えを良くする) 以上のことはありますか?
参照: MSDN の記事- 「部分メソッドにはrefを指定できますが、 outパラメーターは指定できません。」
部分メソッドが実装されていない場合にどうなるかを検討する必要があります。
その場合、メソッドへのすべての呼び出しが、まるで起こらなかったかのように取り除かれます。
したがって、out を使用するメソッドの場合、次のようになります。
stream s;
GetStream(out s);
s.Write(...);
そして、次のようにコンパイルされます。
stream s;
s.Write(...);
が初期化されていないため、このコードは使用できませs
ん。メソッドを呼び出そうとするまでに変数が初期化されるという保証は、 へWrite
の呼び出しと結びついていましたGetStream
。
データを返すメソッドと同じです。部分メソッドを実装していない場合、メソッド呼び出し全体がコンパイルされないため、できることとできないことを検討し、それを呼び出すコードを有効のままにしておく必要があります。および戻り値に関してはout
、呼び出しコードが無効または不完全になる可能性があるため、許可されていません。
に関してはref
、呼び出し元のコードによって初期化が処理されているため、これは有効です。
stream s = null;
GetStream(ref s); // may be stripped out
if (s != null)
s.Write(...);
ref パラメーターとは異なり、out パラメーターはメソッドが戻る前に初期化する必要があるためです。部分メソッドが実装されていない場合 (これは有効なシナリオです)、どのように初期化できますか?
私の推測では、パラメーターは初期化する必要がありますが、パラメーターはout
初期化する必要がないためref
です。
部分メソッドでパラメーターを使用した場合out
、パラメーターが初期化されているかどうかを C# で確認するにはどうすればよいでしょうか?
パラメーターは、メソッドから値が必要であるout
ことを示唆しています。メソッドが存在しない場合、その値を提供することはできません。
別の方法は、メソッド呼び出しを実行する代わりに、変数の値を明示的にデフォルト値 (0、null など) に設定することです。そうすれば、変数は確実に初期化されますが、デフォルト値はあまり役に立たないかもしれません。C# チームはこれを検討したと思います。将来のバージョンにそれが組み込まれる可能性さえあります。個人的には特に役立つとは思いませんが、可能性はあります。
現時点では、代わりにいつでもref
パラメーターを使用でき、デフォルト値が何であれ、呼び出しの前に変数を手動で初期化するだけです。
他の誰もが述べているように、out
パラメータを割り当てる必要があります。これを追加するには、コンパイラエラーCS0177 ref
が生成されますが、呼び出しを行う前にCS0177を割り当てる必要があります。
その理由は、署名のみ (つまり実装なし) の部分メソッドがまだ有効であるためだと思います。out パラメーターがある場合、実装のないメソッドは常にエラーを引き起こします (out 値を割り当てるものがないため)。
部分メソッドは部分クラスに分割されます。OUT パラメータに値を割り当てるにはメソッドが必要です。部分的なメソッドが実装されている場合と実装されていない場合があります。これは、複数のコード チャンクが OUT パラメータに値を代入しようとしていることを意味します。