Frage Sollte eine String-Konstanten-Klasse statisch sein?


Ich arbeite an einem neuen Projekt und habe einen Code entdeckt, von dem ich nicht sicher bin, ob er wahr ist. Die Namen und Werte, die ich verwende, um die Frage zu demonstrieren, sind falsch.

public class MyConsts //Should it be static?
{
    public const string MyConst1 = "a";
    public const string MyConst2 = "b";
    public const string MyConst3 = "c";
    public const string MyConst4 = "d";
    ....
}

Für meine Logik sollte diese Klasse (die nur Werte enthält) statisch sein, also keine Option, sie zu initialisieren, was keinen Sinn hat, bin ich richtig?

BEARBEITEN: Ich habe den Code blind geschrieben, also habe ich die Reihenfolge von String und Const verwechselt - und weil es nicht das Ziel meiner Frage war, habe ich das behoben.


16
2017-10-30 15:52


Ursprung


Antworten:


Ja, es macht Sinn, dass es statisch ist. Das bedeutet dein Absicht, verhindert, dass Clients selbst eine Variable dieses Typs deklarieren usw.

Sie müssen die verschieben const Modifikator Vor der Typ Teil jedoch:

public const string MyConst1 = "a";
...

Wenn sich die Werte jemals ändern könnten, ziehen Sie in Betracht public static readonly Felder statt const though - ansonsten wird der Wert in irgendeinen Code eingebettet, der sich auf die Konstanten bezieht, was bedeutet, dass Sie jeden Client-Code neu erstellen müssen, wenn sich die Werte ändern.

(Eine weitere Option besteht darin, die Konstanten zu erstellen internal Anstatt von public.)


32
2017-10-30 15:54



Ja sollte der Unterricht sein static. Aber verwandt, sollten diese Werte tatsächlich sein const?

Alles erklärt const Wird in einer referenzierenden Assembly kompiliert, also wenn es sich um eine Klassenbibliothek handelt, und Sie eine neue Version mit Änderungen an diesen const-Werten ausgeben, werden sie von den Assemblys, die auf sie verweisen, nicht übernommen.

In diesem speziellen Fall public static readonly string macht Sinn.

Wenn diese jedoch nur in einer einzelnen bestimmten Assembly (z. B. einer Konsolenanwendung oder WinForms-App) angezeigt werden, sollten Sie diese Klasse deklarieren internal und das consts sind in Ordnung, wie es ist.


5
2017-10-30 15:56



Ja, es sollte statisch sein, wenn sich die Werte niemals ändern. Wie Sie bereits gesagt haben, ist es nicht sinnvoll, Client-Code instanziieren zu lassen.


2
2017-10-30 15:54



Wenn es nur enthält consts und enthält nichts anderes, dann wäre es besser, es zu einer statischen Klasse zu machen, um Instantiierung zu verhindern und so zu verstopfen.


1
2017-10-30 15:55



Wirklich, es liegt an dir. Static eignet sich für reine Utility-Klassen.

Beachten Sie, dass eine statische Klasse versiegelt ist; es kann nicht von geerbt werden.


0
2017-10-30 15:57