6

何かのようなもの:

  • メソッド呼び出し後の変数の値を返す必要がある場合:
  • メソッド呼び出しの前にインスタンス化できる場合は、ref を使用します
  • 呼び出しが out を使用する前にインスタンス化する必要がない場合

  • 変数の値が、メソッド呼び出しから他の値を返す、決定する、または計算するために使用される場合は、ref も out も使用しないでください。

正しく取得できましたか?あなたの短いガイドラインは何ですか?

4

3 に答える 3

4

値型の場合:

  • 含まれている値を使用し、元の場所で変更しない場合は、デフォルトの受け渡し方法(値による)を使用します
  • 元のストアで変更する必要がある場合は、refを使用してください。例 :

    int a = -3;
    
    protected void EnsurePositiveValues(ref int value)
    {
        if (value < 0)
            value = 0;
    }
    

参照型の場合:

  • インスタンスを使用するか、インスタンスを変更する必要がある場合は、デフォルトの受け渡し方法を使用します(参照による;「参照コピーによる」と呼ばれる必要があります)
  • 元の参照を(再)割り当てる必要がある場合は、refを使用してください。例 :

    User u = MembershipAPI.GetUser(312354);
    
    protected void EnsureUser(ref User user)
    {
        if (user == null)
            user = new User();
    }
    
于 2009-05-22T08:58:22.493 に答える
1

また、値と参照型を考慮する必要があります。参照型をパラメーターとしてメソッドに渡すときは、変数へのポインターを渡します。つまり、メソッド内で変数に変更を加えることができ、メソッドを呼び出したコードでそれらを使用できるようになります。ただし、nullに設定すると、ポインターをnullに設定するだけで、変数はそのままになります。メソッドが戻ります。

于 2009-05-22T08:58:56.533 に答える
0

これが本当にあなたの質問に答えているかどうかはわかりませんが、私が見つけたref(outキーワードを使用)で値を渡す良い使用法の1つは...

int i = 0;

if (int.TryParse("StringRepresentation", out i)
{
    // do something with i which has taken the value of a the previous successful TryParse
}
于 2009-05-22T08:55:42.187 に答える