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.
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.
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.
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.
Wenn ich eine Variable nur einmal initialisiere und niemals schreibe, würde ich const machen.
Tags und Links c#