2016-08-02 3 views
2

Как решить эту проблему с интерфейсами? Я думаю, что мне нужна эта переменная (и некоторые другие) в этом специальном классе.Свойства интерфейса

public interface Action 
{ 
    void execute(); 
} 

public A:Action 
{ 
    public int misteriousNumber; 

    void execute() 
    { 
     int iUseMisteriousNumber = misteriousNumber; 
    } 
} 

public B:Action 
{ 
    void execute() 
    { 
     //I use nothing. 
    } 
} 

//Some Class... 
static void Main(string[] args) 
{ 
    foreach(Action action in SecretRepositoryOfTheActions.actions) 
    { 
     if(action is A) 
      (SomeTypeOfCasting to A)action.misteriousNumber=13;    
     action.execute(); 
    } 
} 

Просто класс «А» обладают этим свойством не другие классы действий, что использовать для доступа к нему (литье, не интерфейсы другой реализации)?

+0

Что вы хотите достичь? Более конкретно. –

ответ

5

Вы должны бросить его, сначала проверьте тип с is:

foreach(Action action in SecretRepositoryOfTheActions.actions) 
{ 
    if(action is A) 
     ((A) action).misteriousNumber = 13; 
     action.execute(); 
} 

Если вы только хотели обрабатывать A -Объекты (который, кажется, не быть):

foreach(A a in SecretRepositoryOfTheActions.actions.OfType<A>()) 
{ 
    a.misteriousNumber = 13; 
    a.execute(); 
} 
+0

Спасибо, новый в C# :) – JamesB

+0

Второе предложение замечательно для будущих потребностей. – JamesB

Смежные вопросы