誰かが参照型の「参照」のキーワードと参照型の私のチームで
class A { /* ... */ }
class B
{
public void DoSomething(ref A myObject)
{
// ...
}
}
上のREFキーワードの独特の使用につまずい正気の誰かがそのようなことをするだろう、何らかの理由はありますか?私はC#でこれを使用することはできません
誰かが参照型の「参照」のキーワードと参照型の私のチームで
class A { /* ... */ }
class B
{
public void DoSomething(ref A myObject)
{
// ...
}
}
上のREFキーワードの独特の使用につまずい正気の誰かがそのようなことをするだろう、何らかの理由はありますか?私はC#でこれを使用することはできません
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オデッドが話していることの明示的な例は、すでに明らかであっても。 –
ありがとう、それはそれを明確にする! – Luk
@Luk:喜んで助けてくれた! :) – abatishchev
参照を、別のものにmyObject
として渡されたオブジェクトに変更したい場合のみです。
public void DoSomething(ref A myObject)
{
myObject = new A(); // The object in the calling function is now the new one
}
可能性がありません。ref
は必要ありません。
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
これに特有のものは何もありません。メソッドから複数の値を返す場合や、引数として渡したオブジェクトに戻り値を再割り当てしたくない場合は、変数を参照します。このよう
:
int bar = 4;
foo(ref bar);
代わりに:あなたは、いくつかの値を取得したい場合は
int bar = 4;
bar = foo(bar);
または:
int bar = 0;
string foobar = "";
foo(ref bar, ref foobar);
実際、OPは、 'int'のような値型ではなく、参照型について話しています – abatishchev
参照は値型で使われていないと言っていますか? – peterthegreat
afaik、no。値の型は毎回、つまり値ごとに完全にコピーされます。そのため、彼らは値の型と呼ばれています – abatishchev
も参照[この質問](のhttp:// /voice/961717/c-what-is-the-use-of-ref-for-reference-type-variables)。 –
確かに、私は検索中にその質問を逃した。グッドキャッチ – Luk