C # -Klasse und Readonly-Mitglieder

8

Wenn Sie eine Klasse in C # schreiben, ist es eine gute Idee, alle privaten Membervariablen als private readonly zu markieren, wenn sie nur dem Konstruktor zugewiesen sind und sich an keiner anderen Stelle in Ihrer Klasse ändern können? Oder ist das ein Overkill?

    
Bobbo 07.01.2011, 16:08
quelle

6 Antworten

10

Ja, persönlich glaube ich, dass es eine gute Idee ist. Ich versuche, Typen möglichst unwandelbar zu machen, und deklariere eine Variable readonly ist ein guter Start dazu. Es ist natürlich nicht das A und O, wenn diese Variable etwas veränderbar ist (z.B. ein StringBuilder oder ein Array), dann hilft es wirklich nicht viel. Ich würde trotzdem die Variable schreibgeschützt machen, um klar zu machen, dass ich den Wert der Variablen selbst nicht ändern möchte - und mich daran zu hindern, dies zufällig irgendwo in derselben Klasse zu tun, möglicherweise Monate oder Jahre später.

    
Jon Skeet 07.01.2011, 16:11
quelle
4

Ja, das zeigt readonly genau an. Wenn du bereits weißt (oder zumindest annehmen kannst), dass du es nirgendwo anders zuweisen willst, dann ist es eine gute Idee, es als readonly zu markieren. Schließlich ist es einfacher zu entfernen readonly , als es später hinzuzufügen.

    
Adam Robinson 07.01.2011 16:11
quelle
1

Wow, was für eine gute Frage und eine, die rein mit Meinungen beantwortet wird. Meiner Meinung nach erzeuge ich immer nur Eigenschaften für die Variable. Ein Beispiel ist wie folgt.

%Vor%     
dko 07.01.2011 16:12
quelle
0

Ja - Sie werden nicht auf Probleme stoßen, wenn ihre Werte später durch Code geändert werden, der von anderen Entwicklern geschrieben wurde, die nicht wussten, dass sie schreibgeschützt sein sollten.

    
Jakub Konecki 07.01.2011 16:12
quelle
0

Readonly macht sehr viel Sinn in Situationen, in denen Sie eine Servicereferenz durch Konstruktor übergeben, d. h.

public class MyViewModel { private readonly MyContext context; public MyViewModel(MyContext context) { this.context = context; } }

Sie wollen natürlich nicht, dass Ihr Kontext mit einem anderen überschrieben wird, weil Sie eine Menge Dinge abhängig von diesem bestimmten Dienst in der Klasse haben können. Wenn es sich um einen Konstruktorparameter handelt, bedeutet das normalerweise, dass Sie sich auf diesen bestimmten Dienst oder dieses Objekt VERLASSEN, um den gültigen Zustand des Objekts zu erstellen und beizubehalten. Daher ist readonly ein guter Indikator dafür. Wenn private property auf property gesetzt ist, bedeutet dies, dass Sie sie nicht außerhalb der Klasse ändern können. Readonly ist eine zusätzliche Einschränkung, die die Dinge ein wenig sicherer und verständlicher macht.

    
Bruno Altinet 07.01.2011 16:29
quelle
-1

Wenn ich eine Variable nur einmal initialisiere und niemals schreibe, würde ich const machen.

Ссылка

    
Jonathan Wood 07.01.2011 16:15
quelle

Tags und Links