2016-06-03 2 views
1

Wie C# 6 using static Funktion sollte in richtiger Weise verwendet werden? Es sieht wirklich gut aus für Fälle wie Verkürzung string.Format (CultureInfo.InvariantCulture, "Some format"); bis Format (InvariantCulture, "Some format");, aber ist es immer so?Der richtige Weg zur Verwendung von C# 6 "using static" -Funktion

Nehmen Sie dies zum Beispiel. Sie haben enum wie folgt aus:

enum Enum { Value1, Value2 } 

Und Sie entscheiden, um es wie dies in Code zu verwenden:

using static {Namespace}.Enum; 
// ... 
var value = Value1; 

Letzten auf Sie entscheiden Value1 ein class genannt zu erstellen. Dann wird Ihr Code var value = Value1 Compiler-Fehler:

'Value1' is a type, which is not valid in the given context

oder anderen Fall. Sie haben zwei Klassen mit unterschiedlichen static Methoden:

class Foo { 
    public static void Method1() { } 
} 

class Foo2 { 
    public static void Method2() { } 
} 

Und Sie verwenden es in der 3. class wie

using static {Namespace}.Foo; 
using static {Namespace}.Foo2; 
// ... 
class Bar { 
    void Method() { 
     Method1(); 
     Method2(); 
    } 
} 

der gut arbeitet. Aber wenn Sie sich entscheiden, Method2 in Fooclass dieser Code einführen wird Compiler-Fehler:

The call is ambiguous between the following methods or properties: 'Foo.Method2()' and 'Foo2.Method2()'

So ist meine Frage, was ist der richtige Weg using static Funktion zu verwenden?

+3

Ich sehe nicht, wie 'Static 'hier ist etwas Besonderes. Sie haben Arbeitscode. Sie führen ein neues Element ein, das bedeutet, dass es jetzt eine Mehrdeutigkeit gibt, wo es vorher noch nicht existierte. Sie müssen Ihren Code expliziter machen. Genauso verhält es sich mit nicht-statischem 'using', wenn ein neuer Typ zu einem Namespace hinzugefügt wird und der Name dieses Typs mit dem Namen eines anderen Typs in einem anderen Namespace übereinstimmt. –

+0

@Damien_The_Unbeliever Also, 'static statistics' zu benutzen, schafft nur einen größeren Bereich für Namenskollisionen? –

+0

Offensichtlich ist es nicht, wenn Sie den Compiler damit confuzzle. Und sicher * erhöhen * Sie die Wahrscheinlichkeit, dass die Bezeichner nicht eindeutig sind. Es funktioniert in der Regel gut, wenn Sie eine Quelldatei pro Typ verwenden, ein Programmierstil, der ziemlich häufig vorkommt. Dreht meinen Propeller nicht, sondern folgt immer den Kodierungsrichtlinien Ihres Teams. –

Antwort

2

Die genannten "Probleme" waren bereits in früheren Versionen der Sprache bezüglich der Typennamensauflösung vorhanden.

Diese Funktion bringt nur diese "Probleme" zu type members.

2

Ich habe keine Empfehlungen zu diesem Thema gelesen. Aber meiner Meinung nach können Sie using static für Dinge verwenden, die Ihnen Namen geben, die alleine sinnvoll sind.

using static Math; 

var max = Max(value1, value2); 

Im Fall string.Format ich denke, es wird nicht klar, was Format Mittel (alle Arten von Sachen in etwas formatiert werden können, die eine Art von Format hat).

Verwandte Themen