Ich möchte einen Alias für einen Klassennamen erstellen. Die folgende Syntax wäre perfekt:
public class LongClassNameOrOneThatContainsVersionsOrDomainSpecificName
{
...
}
public class MyName = LongClassNameOrOneThatContainsVersionOrDomainSpecificName;
aber es wird nicht kompiliert.
Beispiel
Hinweis Dieses Beispiel dient nur der Übersichtlichkeit. Versuchen Sie nicht, dieses spezielle Problem zu lösen, indem Sie vorschlagen, das Design des gesamten Systems zu ändern. Das Vorhandensein oder Fehlen dieses Beispiels ändert nichts an der ursprünglichen Frage.
Einige vorhandene Codes hängen vom Vorhandensein einer statischen Klasse ab:
public static class ColorScheme
{
...
}
Dieses Farbschema ist das Outlook 2003-Farbschema. Ich möchte ein Outlook 2007-Farbschema einführen und dabei das Outlook 2003-Farbschema beibehalten:
public static class Outlook2003ColorScheme
{
...
}
public static class Outlook2007ColorScheme
{
...
}
Aber ich bin immer noch mit der Tatsache konfrontiert, dass der Code vom Vorhandensein einer statischen Klasse namens abhängt ColorScheme
. Mein erster Gedanke war, eine ColorScheme
Klasse zu erstellen , die ich entweder erben werde Outlook2003
oder Outlook2007
:
public static class ColorScheme : Outlook2007ColorScheme
{
}
Sie können jedoch nicht von einer statischen Klasse erben.
Mein nächster Gedanke war, die statische ColorScheme
Klasse zu erstellen , aber make Outlook2003ColorScheme
und Outlook2007ColorScheme
Klassen nicht statisch. Dann kann eine statische Variable in der statischen ColorScheme
Klasse auf eines der "echten" Farbschemata verweisen:
public static class ColorScheme
{
private static CustomColorScheme = new Outlook2007ColorScheme();
...
}
private class CustomColorScheme
{
...
}
private class Outlook2008ColorScheme : CustomColorScheme
{
...
}
private class Outlook2003ColorScheme : CustomColorScheme
{
...
}
Dafür müsste ich jedoch eine Klasse konvertieren, die vollständig aus schreibgeschützten statischen Farben besteht, in überschreibbare Eigenschaften, und dann ColorScheme
müsste meine Klasse die 30 verschiedenen Eigenschafts-Getter in das enthaltene Objekt einbinden .
Das ist einfach zu viel Tippen.
Mein nächster Gedanke war also, die Klasse zu aliasen:
public static ColorScheme = Outlook2007ColorScheme;
Das lässt sich aber nicht kompilieren.
Wie kann ich eine statische Klasse in einen anderen Namen aliasen?
Update: Kann jemand bitte die Antwort "Sie können dies nicht in C # tun" hinzufügen , damit ich dies als akzeptierte Antwort markieren kann. Jeder andere, der die Antwort auf dieselbe Frage wünscht, findet diese Frage, die akzeptierte Antwort und eine Reihe von Problemumgehungen, die nützlich sein können oder nicht.
Ich möchte diese Frage nur abschließen.
interface
, die alle Ihre Klassen implementieren. Wie in der Antwort von chills42 erwähnt . Sie können dann einen "Service" oder eine "Factory" definieren, die ein Objekt zurückgibt, das diese Schnittstelle implementiert, abhängig von den aktuellen Umständen (z. B. Plattform / Betriebssystem) oder einer Konfigurationsdatei.