2010-12-30 11 views
0

私は別のデータを一つのオブジェクトを更新したい、そうのようなもの:このメソッドにはrefキーワードが必要ですか?

User updatingUser = Users.Get(someId); 

updatingUser.Name = otherUser.Name; 
updatingUser.Age = otherUser.Age; 

は今、私はパラメータリストで参照が必要なのか、このアップデートを実行するためのメソッドを作成したいですか?

public static void UpdateUserFromUser(User original, User other) 
{ 
    original.Name = other.Name; 
    original.Age = other.Age; 
    .. 
    .. 

} 

は今すぐに渡された「元」ユーザが設定されているオブジェクトのプロパティを持っており、それは更新されませんので、このユーザオブジェクトは、いくつかのプロパティが更新されます。

私は次のように、正しい参照が必要になります。

public static void UpdateUserFromUser(ref User original, User other) 

OR「オリジナル」オブジェクトが参照を必要とせずに更新されますか?

答えて

2

Userがクラスの場合、クラスは参照型であるため、refキーワードは不要です。 です。refを使用すると、実際に微妙な動作の違いがありますが、変数を変更していないため、必要ではありません。むしろ、それが参照するオブジェクトのプロパティを変更しています。

+0

微妙な違いは何ですか? – Blankman

+0

@Blankman:参照型の 'ref'では、変数が指すメモリ内のオブジェクトを変更することができます。これは簡単に説明しています:http://stackoverflow.com/questions/961717/c-what-is-the-use-of-ref-for-reference-type-variables – BoltClock

0

refは不要です(Userをクラスとします)。

3

ユーザーがstructclassかどうかによって異なります。クラスは参照によって渡されます。つまり、Userがクラスの場合、元のオブジェクトを更新するにはrefキーワードは不要です。構造体は値渡しされるので、更新する場合はrefを使用する必要があります。

関連する問題