2016-03-05 4 views
0

Я думал о перечислении с переменными. Как объект prefab для класса со специфическими значениями. Я придумал это:Как называется эта реализация и является ли она «правильной»?

public class myClass { 

string name; 
int number; 

public static myClass Version1 = new myClass("test",1); 
public static myClass Version2 = new myClass("notest",2); 

public myClass(string name, int number) 
{ 
    this.name = name; 
    this.number = number; 
} 

} 

Теперь я могу получить доступ к предопределенным объектам из других классов.

Есть ли у него специальное имя? Как работает enum? Есть ли лучший способ сделать это?

Мне любопытно, и мне очень понравилась бы помощь.

+0

Похоже, что его называют сильно типизированных Enum Pattern http://geekswithblogs.net/TimothyK/archive/2014/07/31/strongly-typed-enum-pattern .aspx –

ответ

1

В контексте «есть лучший способ сделать это», возможно, это полезно ...

Я не могу сказать, что именно вы хотите достичь, но C# имеет некоторые богатые возможности встроены в Это. Вы должны изучить ниже, узнать о других шаблонах, которые могут существовать, и применять лучшие из них в своем проекте.

public enum Versions 
{ 
    Test = 1, 
    [Description("No Test!!")] 
    NoTest = 2 
} 

// NOTE: this function taken from http://stackoverflow.com/questions/18625488/alternative-names-for-c-sharp-enum 
public static class EnumExtensions 
{ 
    public static string GetDescription(this Enum value) 
    { 
     FieldInfo fi = value.GetType().GetField(value.ToString()); 

     if (fi != null) 
     { 
      DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
      return (attributes.Length > 0) ? attributes[0].Description : value.ToString(); 
     } 

     return value.ToString(); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine($"Enum Test has name of {Enum.GetName(typeof(Versions), Versions.Test)} and a value of {(int)Versions.Test}"); 
     Console.WriteLine($"Enum NoTest has description of {EnumExtensions.GetDescription(Versions.NoTest)} and a value of {(int)Versions.NoTest}"); 

     return; 

Производит:

Enum Test has name of Test and a value of 1 
Enum NoTest has description of No Test!! and a value of 2 
Смежные вопросы