2011-01-11 37 views
6

誰かが参照型の「参照」のキーワードと参照型の私のチームで

class A { /* ... */ } 

class B 
{  
    public void DoSomething(ref A myObject) 
    { 
     // ... 
    } 
} 

上のREFキーワードの独特の使用につまずい正気の誰かがそのようなことをするだろう、何らかの理由はありますか?私はC#でこれを使用することはできません

+0

も参照[この質問](のhttp:// /voice/961717/c-what-is-the-use-of-ref-for-reference-type-variables)。 –

+0

確かに、私は検索中にその質問を逃した。グッドキャッチ – Luk

答えて

12

class A 
{ 
    public string Blah { get; set; } 
} 

void Do (ref A a) 
{ 
    a = new A { Blah = "Bar" }; 
} 

その後、

A a = new A { Blah = "Foo" }; 
Console.WriteLine(a.Blah); // Foo 
Do (ref a); 
Console.WriteLine(a.Blah); // Bar 

しかし、単に

void Do (A a) 
{ 
    a = new A { Blah = "Bar" }; 
} 

その後、

場合みよう0
+1

+1オデッドが話していることの明示的な例は、すでに明らかであっても。 –

+0

ありがとう、それはそれを明確にする! – Luk

+0

@Luk:喜んで助けてくれた! :) – abatishchev

15

参照を、別のものにmyObjectとして渡されたオブジェクトに変更したい場合のみです。

public void DoSomething(ref A myObject) 
{ 
    myObject = new A(); // The object in the calling function is now the new one 
} 

可能性がありません。refは必要ありません。

0

refキーワードは、メソッドに渡された変数に格納されている参照を変更する場合に便利です。 refを使用しない場合、参照のみを変更することはできません。オブジェクト自体がメソッドの外側に表示されます。

this.DoSomething(myObject); 
// myObject will always point to the same instance here 

this.DoSomething(ref myObject); 
// myObject could potentially point to a completely new instance here 
0

これに特有のものは何もありません。メソッドから複数の値を返す場合や、引数として渡したオブジェクトに戻り値を再割り当てしたくない場合は、変数を参照します。このよう

int bar = 4; 
foo(ref bar); 

代わりに:あなたは、いくつかの値を取得したい場合は

int bar = 4; 
bar = foo(bar); 

または:

int bar = 0; 
string foobar = ""; 
foo(ref bar, ref foobar); 
+0

実際、OPは、 'int'のような値型ではなく、参照型について話しています – abatishchev

+0

参照は値型で使われていないと言っていますか? – peterthegreat

+0

afaik、no。値の型は毎回、つまり値ごとに完全にコピーされます。そのため、彼らは値の型と呼ばれています – abatishchev