public class ClassA
{
public static readonly string processName;
}
public class ClassB : ClassA
{
static ClassB()
{
processName = "MyProcess.exe";
}
}
Ich erhalte einen Fehler beim Kompilieren des obigen C# -Codes.Zuordnung zum statischen schreibgeschützten Feld der Basisklasse
Der Fehler sagt - „Ein statisches Nur-Lese-Feld nicht (außer in einem statischen Konstruktor oder eine Variableninitialisierer) zugeordnet werden kann“
Aber ich es in einem statischen Konstruktor bin zuweisen.
Die Notwendigkeit für eine solche statische Variable besteht darin, dass die Basisklasse über Methoden verfügt, die diese Variable verwenden, die abgeleiteten Klassen und die Basisklasse jedoch unterschiedliche Werte für diese Variable haben müssen. Der Wert ist jedoch für alle Instanzen der jeweiligen Klasse konstant. Es muss nur gelesen werden, weil es nirgends geändert werden darf.
Was ist der Fehler im obigen Code? (Wenn es welche gibt), scheint es mir nicht möglich zu sein. Die Fehlermeldung hilft nicht. Weil ich damit nichts falsch mache.
Wenn ein Fehler auftritt, wie kann ich diese Funktionalität implementieren? Ich weiß, ein einfacher Workaround wäre, es zu einer Instanzvariable zu machen und ihnen unterschiedliche Werte in den abgeleiteten Klassen zuzuweisen. Dies ist jedoch unnötig, da der Wert für alle Instanzen der jeweiligen Klasse konstant ist.
Genau! "Polymorphismus über den Typ". Ich denke nicht, dass es passender formuliert werden könnte. Danke für den Hinweis, dass es in .NET nicht unterstützt wird. – Poulo