2016-07-31 5 views
4

Wenn ich meine obj als null seine Ausgabe 30 an Aktualisierung ist aber keine Ausnahme, aber wenn ich die Aktualisierung obj.Age = 25 Ausgabe ist 25.Warum Objekt nicht als NULL aktualisiert

Ich bin nicht auf die Idee zu bekommen, was hinter dem geschieht Szene. Kann jemand erklären, warum das passiert?

public class A 
{ 
    public int age; 
} 

class Program 
{ 
    public static void Test(A obj) 
    { 
     //obj = null; 
     //obj.age = 25; 
    } 

    static void Main(string[] args) 
    { 
     try 
     { 
      A obj = new A(); 
      obj.age = 30; 
      Test(obj); 
      Console.WriteLine(obj.age); 
     } 
     catch (Exception) 
     { 
      throw; 
     } 
    } 
} 

Antwort

2

Mitteilung über die Methode Signatur finden Lesen -

public static void Test(A obj) 

Der Parameter nicht als ref geben wird. Wenn die Referenztypen als Parameter übergeben werden, ohne Angabe als ref. Sie können die Eigenschaftenwerte innerhalb des Objekts ändern, aber Sie können das Objekt nicht zuweisen, um es auf einen anderen Speicherort zu verweisen.

In einfachen Worten kann man nicht tun - obj = null OR obj = new A() OR obj = instanceOfAnotherObject

der Lage sein, auch das Objekt zu ändern, müssen Sie die Methode Signatur ändern und durch ref obj passieren -

public static void Test(ref A obj) 
2

Wenn Sie obj = null; tun dann setzen Sie das Objekt nicht auf Null, sondern die Referenz auf das Objekt zu null. Wie in Ihrer Methode Test ist der Parameter eine neue Referenz auf das übergebene Objekt. Er wirkt sich nicht auf die Referenz in Main aus, so dass die Einstellung obj auf null in Test nur eine Auswirkung auf diese Methode hat.
Zu tun/sehen, was Sie wollen, Sie wollen vielleicht wie so

public static void Test(ref A obj) 

die Parameter von Test zu einem ref Parameter ändern und Test rufen Sie dann wie so

... 
A obj = new A(); 
obj.age = 30; 
Test(ref obj); 
... 

wie jetzt Sie das tatsächlich ändern obj Referenz der Main Methode.


Wenn Sie das tun obj.age = 25; in Test (natürlich ohne obj zu null vor ihm Einstellung), dann ändern Sie das gleiche Objekt wie obj in Main Punkte und so, wenn die age an die Konsole zu schreiben sehen Sie 25.
Das ist möglich, weil es als Referenz übergeben wurde - wenn Sie A durch ersetzen z int und übergeben, dass dann ändern ihren Wert in Test wird nicht in der Ausgabe von Main als Ganzzahlen werden durch Wert übergeben. Sie können diese page und die folgenden Seiten, um es hilfreich

Verwandte Themen