2017-01-07 5 views
1

refタイプとReference type私はオブジェクトの値を変更することができるので、それらの違いは何ですか?C#の参照型とrefの違いは何ですか?

誰かがanswerを提供しましたが、それでも私にとっては不明です。 refキーワードと

static void Main(string[] args) 
{ 
    myclass o1 = new myclass(4,5); 
    Console.WriteLine("value of i={0} and j={1}", o1.i, o1.j); //o/p=4,5 

    o1.exaple(ref o1.i, ref o1.j); //Ref type calling 
    Console.WriteLine("value of i={0} and j={1}", o1.i, o1.j);// o/p=2,3 
    myclass o2 = o1; 
    Console.WriteLine("value of i={0} and j={1}", o2.i, o2.j); // o/p 2,3 
    o1.i = 100; 
    o1.j = 200; 
    Console.WriteLine("value of i={0} and j={1}", o1.i, o1.j); //o/p=100,200 
    Console.WriteLine("value of i={0} and j={1}", o2.i, o2.j); //o/p=100,200 
    Console.ReadKey(); 
} 

public class myclass 
{ 
    public int i; 
    public int j; 

    public myclass(int x,int y) 
    { 
     i = x; 
     j = y; 
    } 
    public void exaple(ref int a,ref int b) //ref type 
    { 
     a = 2; 
     b = 3; 
    } 
} 
+1

それはポインタとCのポインタへのポインタの違いです。 –

答えて

4

パラメータは、この参照が後に以下

public void TestObject(Person person) 
{ 
    person = new Person { Name = "Two" }; 
} 

public void TestObjectByRef(ref Person person) 
{ 
    person = new Person { Name = "Two" }; 
} 

その後、あなたはそれらのメソッドを使用し

var person = new Person { name = "One" }; 

TestObject(person); 
Console.WriteLine(person.Name); // will print One 

TestObjectByRef(ref person); 
Console.WriteLine(person.Name); // will print Two 

を変更指しますどこで変更することができ、オブジェクトの参照への参照を提供しますMSDNからの引用:https://msdn.microsoft.com/en-us/library/14akc2c7.aspx

refキーワードを指定すると、 の値ではなく、参照渡しの引数が渡されます。参照渡しの影響は、呼び出されたメソッド内の パラメータへの変更が呼び出し元のメソッドに反映されることです。 の場合、呼び出し元がローカル変数式または配列 要素アクセス式を渡し、呼び出されたメソッドがrefパラメータが参照するオブジェクト を置き換えた場合、呼び出し元のローカル変数 は配列要素が新しいオブジェクト。

refキーワードなしのメソッドにパラメータとして参照型を渡すと、コピーとして渡されたオブジェクトへの参照が渡されます。オブジェクトの値(プロパティ)を変更することはできますが、別のオブジェクトを参照するように設定すると元の参照には影響しません。

+0

もっと詳しく教えてください。C#先週のみ学習し始めました。 –

+0

"元のオブジェクトには影響しません参照。"事前に感謝を説明するための簡単な例(コード)を書くことができます:) –

+0

例は、答えに 'TestObject'メソッドの使用を参照してください – Fabio

関連する問題