2017-01-26 15 views
0

Ich habe eine Bibliothek.Warum benötigt die Enumeration in diesem Beispiel keine Objekterstellung?

namespace Defintnions 
{ 
    public class skywave 
    { 
     public enum partnum : byte { assembled, configured }; 
     public readonly string partnum_assembled = "1234B"; 
    } 
} 

Ich teste es in diesem anderen Projekt in der gleichen Lösung.

using Defintnions; 


namespace ConsoleApplication1 
{ 
    class MainEntry 
    { 

     static void Main(string[] args) 
     { 
      string test3 = skywave.partnum.Assembled.ToString(); //assembled 

      string zxcv = skywave.partnumAssembled; //doesnt compile 
      skywave obj = new skywave();    
      string asdf = obj.partnumAssembled;  //1234B 

      Console.WriteLine(test3); 
      Console.WriteLine(asdf); 
      Console.ReadKey(true); 
     } 
    } 
} 

Ich bin verwirrt, warum test3 nicht die Erstellung des Objekts lokal enum erfordern.

Ich denke, es ist sehr sauber, aber das führt mich zu der Frage, ob es eine Möglichkeit gibt, etwas ähnliches zu tun, aber stattdessen die Ausgabe der enum ein alphanumerisches sein.

Idealerweise möchte ich, dass meine Bibliothek die folgenden Funktionen ausführen kann, aber ohne die Mühe, zuerst ein Objekt zu erstellen.

string zxcv = skywave.partnum.assembled; //1234B 
+0

Sie definieren einen 'enum' Typ in Ihrer Klasse, nicht ein Feld, dessen Typ eine' enum' ist – juharr

Antwort

1

Enums sind Typen in C#. In Ihrem Code ist skywave eine Klasse, die eine Enum partwave enthält. Wenn Sie in der Lage sein wollen skywavepartwave ohne Bezug zu verweisen, müssen Sie es außerhalb der Klasse definieren:

public enum partnum : byte { assembled, configured }; 
public class skywave 
{ 
    public readonly string partnum_assembled = "1234B"; 
} 

Wenn Sie wollen partnum_assembled beziehen können, ohne skywave instanziiert wird, müssen Sie es definieren als static oder const

public class skywave 
{ 
    public static readonly string partnum_assembled = "1234B"; 
} 

oder

public class skywave 
{ 
    public const string partnum_assembled = "1234B"; 
} 
1

Ein geschachtelter Typ (in diesem Fall eine Aufzählung, obwohl er für jede andere Art von geschachtelten Typen gelten würde) wird nicht über eine Instanz des enthaltenden Objekts, sondern über das umgebende Objekt selbst aufgerufen.

eine bestimmte Instanz skywave enthält nicht die partnum Typ. Die gesamte Klasse skywave enthält den Typ, sodass Sie über diesen Typ auf die enum zugreifen können.

Es gibt keine implizite Konvertierung von enum zu string. Es gibt auch keine Möglichkeit, eine zu erstellen. Sie müssten Ihren eigenen benutzerdefinierten Typ erstellen und ein Enum-Muster emulieren, um eine implizite Konvertierung in string zu haben.

Verwandte Themen