2015-04-09 4 views
0

У меня есть класс с enums установки, как так:Использование значений перечислений для сравнения

[FlagsAttribute] 
public enum firstByte : uint 
{ 
    Battery = 4,   
    Reverse = 4 
}; 

[StructLayout(LayoutKind.Sequential)] 
public class class1: PropertyChangedBase 
{ 
    public firstByte FirstByte; 
} 

из другого класса я хотел бы использовать сравнение, как:

class class2 
{  
    uint test = 1; 

    if (class1.FirstByte.Battery >= test) {...} 
} 

Но я не могу на самом деле достигать Battery подобный. This question действительно похож, но это не совсем то же самое, потому что его enum не используется объектно-ориентированным образом, как у меня. Я также воспользовался this question, но это меня смущает, потому что он устанавливает его свойство enum, равное объекту от enum. Как мне сделать что-то вроде: class1.FirstByte.Battery?

+1

Ваш код не компилируется. Перечисление должно быть определено вне интерфейса. Вы можете определить свойство на интерфейсе с типом перечисления. – Romoku

+0

Вау, ты прав. Это было глупо. Нужно ли все-таки определять их в классе? Я получаю ошибку времени выполнения, когда я определяю перечисления вне класса в пространстве имен. Вероятно, ошибка новичков. Я не много работал с перечислениями. –

+0

Вам необходимо определить метод, который использует тип Class1. – Romoku

ответ

0

Вы можете определить способ на Class2, который использует свойство FirstByte. В противном случае FirstByte должен быть помечен как static.

[FlagsAttribute] 
public enum FirstByte : uint 
{ 
    Battery = 4,   
    Reverse = 4 
} 

Используйте метод с параметром:

public class Class1 
{ 
    public FirstByte FirstByte { get; set; } 
} 

public class Class2 
{  
    public bool SomeMethod(Class1 class1) 
    { 
     uint test = 1; 

     return class1.FirstByte >= (FirstByte) test; 
    } 
} 

Используйте статическое поле, когда FirstByte должен быть глобальным:

public class Class1 
{ 
    public static FirstByte FirstByte { get; set; } 
} 

public class Class2 
{  
    public bool SomeMethod() 
    { 
     uint test = 1; 

     return Class1.FirstByte >= (FirstByte) test; 
    } 
} 
Смежные вопросы