1

たとえば、簡単な方法を考えてみましょう。

public string GetDisplayName(string username, IUserService UserService)
{
    var user = UserService.GetUserByUsername(username);
    return string.Format("{0} {1} {2} ({3})", user.Title, user.FirstName, user.LastName, username);
}

したがって、UserService はクラスであり、C# の定義により、クラスは参照型です。

私が次のことをした場合:

public string GetDisplayName(string username, ref IUserService UserService)
{
    var user = UserService.GetUserByUsername(username);
    return string.Format("{0} {1} {2} ({3})", user.Title, user.FirstName, user.LastName, username);
}

ここでの主な違いは何ですか?

4

2 に答える 2

0

違いは次のとおりです。

  • パラメータを持つメソッドは、そのrefパラメータの変数で呼び出す必要があります。たとえばnew CompanyUserService()、呼び出し用のユーザー サービスを作成するために を使用する場合は、それを変数に入れて、新しく作成された参照を渡すだけでなく、その変数を呼び出しで使用する必要があります。

  • パラメータを持つメソッド内refで、呼び出しで使用される変数の値を変更できます。他のメソッドでは、パラメーターは値のコピーであるため、メソッド内のパラメーター変数の値を変更しても、メソッドの外側には影響しません。

  • キーワードを持つパラメーターrefは、値自体ではなく、値を含む変数へのポインターとして送信されるため、メソッドでパラメーターを使用するたびに、リダイレクトの別の手順が必要になります。

(最後のポイントは仕様によって規定されていませんが、実際の実装ではパラメータがどのように処理されるかが規定されていrefます。仕様では、パラメータがどのように機能するかのみが規定されており、実装方法は規定されていません。)

于 2013-08-07T08:24:05.777 に答える