it-swarm.com.de

Hat die Verwendung eines Objektinitialisierers einen Vorteil?

Gibt es Vorteile bei der Verwendung von C # - Objektinitialisierern?

In C++ gibt es keine Referenzen, und alles ist in einem Objekt gekapselt. Daher ist es sinnvoll, diese zu verwenden, anstatt Elemente nach der Objekterstellung zu initialisieren.

Was ist der Fall für ihre Verwendung in C #?

Gewusst wie: Initialisieren von Objekten mithilfe eines Objektinitialisierers (C # -Programmierhandbuch)

49
wayfare

Ein häufig verpasster Vorteil ist Atomicity. Dies ist nützlich, wenn Sie doppelt geprüftes Sperren für ein Objekt verwenden. Der Objektinitialisierer gibt das neue Objekt zurück, nachdem es alle Mitglieder initialisiert hat, denen Sie es mitgeteilt haben. Aus dem Beispiel im MSDN-Artikel:

StudentName student = new StudentName
{
    FirstName = "Craig",
    LastName = "Playstead",
    ID = 116
};

Würde wie folgt übersetzt:

StudentName _tempStudent = new StudentName();
_tempStudent.FirstName = "Craig";
_tempStudent.LastName = "Playstead";
_tempStudent.ID = 116;

StudentName student = _tempStudent;

Dadurch wird sichergestellt, dass student niemals teilweise initialisiert wird. Es ist entweder null oder vollständig initialisiert, was in Szenarien mit mehreren Threads hilfreich ist.

Für weitere Informationen hierzu können Sie this article auschecken.

Ein weiterer Vorteil besteht darin, dass Sie anonyme Objekte erstellen können (z. B. eine Projektion erstellen oder mehrere Schlüssel in LINQ zusammenfügen).

96
Jon Senchyna

Es gibt einen möglichen Grund, um nicht Objektinitialisierer zu verwenden: Wenn während der Initialisierung eine Ausnahmebedingung vorliegt, gibt der Aufrufstapel im Debugger von Visual Studio nur den Initialisierungsausdruck zurück und nicht die Zeile, in der die Ausnahmebedingung aufgetreten ist.

Wenn Sie Bibliotheken oder externe Dienste mit schlecht benannten Ausnahmen verwenden oder alternativ Bibliotheken mit nativem Code verwenden, bei denen der Code, der die Ausnahme auslöst, nicht angezeigt wird (z. B. Xamarin unter Android), können Objektinitialisierer das Debuggen von Code seitdem schwieriger machen Sie wissen nicht, durch welchen Parameter die Ausnahme ausgelöst wurde.

Beispiel: Stellen Sie sich vor, dies ist Ihr Code, aber Sie können die Quelle von ExternalService nicht lesen, da sie außerhalb Ihrer Anwendung liegt. Sie wissen nicht, dass der Parameter "charlie" den Fehler in ExternalService verursacht hat.

    var instance = new ClassToBeInitialized
    {
        alpha = "alpha", 
        bravo = ExternalService(0),
        charlie = ExternalService(1)
    };

    private static string ExternalService(int parameter)
    {
        if (parameter == 1)
        {
            throw new Exception("The external service crashed");
        }

        return "correctStringResult";
    }
29
Geir Smestad

Vorteile sind die Verwendung anonymer Objekte, linq-Abfragen, und manchmal ein unnötiges Überladen von Konstruktoren, nur um Parameter zu übergeben

14
AD.Net

Ich denke, dass es die Lesbarkeit fördert. 

Als Randbemerkung möchte ich in dem im Link angegebenen Beispiel manchmal einen privaten Setter für die Eigenschaften (FirstName und LastName) verwenden, dies hängt jedoch von Ihrem Design ab.

1
Kirby

Es gibt drei Hauptvorteile der Objektinitialisierung

  • Vermeiden Sie viele Tastenanschläge. Die Effizienz von Softwareprogrammen wird manchmal an der Anzahl der Tastenanschläge gemessen, die zum Schreiben einer bestimmten Funktion erforderlich sind.

  • Leicht lesbar und wartbar.

  • Zeitsparender Ansatz.

Mal sehen, wie es viele Tastenanschläge vermeiden kann:

Vor c # 3.0 haben wir diese Initialisierung durchgeführt-

         public  class Employee  
        {  
            public string Name { get; set; }  
            public int Id { get; set; }  
            public string Department { get; set; }  
            public int salary { get; set; }  
        }  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                Employee emp=new Employee();  
                emp.Name = "Kumar";  
                emp.Department = "IT";  
                emp.Id = 101;  
                emp.salary = 80000;  
                Console.ReadLine();  

            }  
        } 

Nun werden wir nach c # 3.0 in einer Zeile wie folgt initialisieren.

class Program  
    {  
        static void Main(string[] args)  
        {  
            Employee emp = new Employee {Name = "Kisan",Id = 55,Department = "IT",salary = 20000};        

        }  
    }  
0
Debendra Dash