Gibt es festgelegte Benennungs- oder Kodierungskonventionen für die Definition von namespace or type aliases in C#?Typ-/Namespace-Aliaskonventionen in C#
Für diejenigen, die nicht wissen, hat die C# -Sprache eine Funktion, wo Aliase lokal für eine Datei für Namespaces und Typen definiert werden können. Dies kann nützlich sein, wenn Namenskonflikte mit Bibliotheken von Drittanbietern auftreten und Typnamen in Ihrem Code verkürzt werden. Unten ist ein Beispiel dafür, wie es aussieht.
using Forms = System.Windows.Forms;
Die meisten Beispiele, die ich rund um die Web gesehen haben neigen dazu, über unabbreviated aktivierten Namen als Aliasnamen wie die Alias Forms im Beispiel zu verwenden. An einigen Stellen einschließlich der official MSDN page, die Beispiel mit einem Alias von colAlias für den Namespace System.Collections erklärt. Um es komplizierter zu machen, kann es eine Präferenz für einige geben, unterschiedliche Richtlinien zu wählen, abhängig davon, ob ein Namespace-Alias oder ein Typ-Alias definiert wird.
Um einige Hintergrundinformationen zu geben, warum ich mich für irgendwelche Richtlinien mit Alias-Namen interessiere, werde ich erklären, was ich mache. In einem kürzlichen Projekt habe ich begonnen, ein Muster zu vereinfachen, bei dem ich mehrere Klassen habe, die von einer generischen Basisklasse erben, die komplexe Typargumente akzeptiert, indem ich Typaliasnamen verwende.
Mit dieser Technik wird das untenstehende komplexe Beispiel viel lesbarer, sobald Aliase verwendet werden.
public class MyClass: MyGenericBaseClass<TripleLindyFancyAlgorithm<List<SomeValueType>>, List<SomeValueType>>
{
public override List<SomeValueType> DoSomething(TripleLindyFancyAlgorithm<List<SomeValueType>> operation)
{
// ...
}
}
Und unter der MUST-Cleaner-Version mit Typ Aliase.
using Result = List<SomeValueType>;
using Algorithm = TripleLindyFancyAlgorithm<List<SomeValueType>>; // Note: cannot reference an alias within an alias definition!
public class MyClass: MyGenericBaseClass<Algorithm, Result>
{
public override Result DoSomething(Algorithm operation)
{
// ...
}
}
Obwohl dies viel mehr simpel aussieht, ist es leicht zu vergessen, dass ein Alias wie Ergebnis eigentlich nur ein Alias für Liste ist und dass es kein tatsächlicher Typ Ergebnis genannt. Um die Konzepte visuell zu trennen, beachte ich, dass man einigen Präfix-Konventionen folgen muss, die der Verwendung von Unterstrichen "_" vor privaten Mitgliedern ähnlich sind, um Typ-Aliase von tatsächlichen Typen zu unterscheiden. Bevor ich das mache, möchte ich jedoch sicherstellen, dass ich das Rad nicht neu erfinde, da es dort vielleicht schon etabliertere Konventionen gibt.
Großartig das ist wirklich der erste Beitrag, der über Konventionen diskutiert, was ich ursprünglich mit dieser Frage getan habe. – jpierson
Ausgezeichnet mit dem Kopfgeld. Vielen Dank, dass Sie sich mit der gestellten Frage befasst haben (d. H. Nicht nur Ihre eigenen Präferenzen angegeben haben) und diese mit realen Erfahrungen unterstützt haben. –
@MatthewStrawbridge - Danke dafür. Wie Sie sagen, scheinen die anderen Antworten die Frage überhaupt nicht anzusprechen, sondern persönliche Präferenzen zu enthalten. Die Ungleichheit in der Antwort zeigt auch, dass es tatsächlich keinen Konsens über Konventionen für Namespace-Aliase gibt ... – Oded