2013-09-18 3 views
0

Я хотел бы создать класс, который имеет переопределяемые методы в форме делегатов.Делегат Использование «this»

Я в основном хотел бы создать интерфейс, но не должен создавать новый класс каждый раз, когда хочу сделать его немного другим.

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

Теперь еще несколько особенностей.

class Gun 
{ 
    public delegate void ShootDelegate; 

    // There are more variables, I'm just using this one as an example  
    public double fireRate; 

    public Gun(GunStats stats) 
    { 
     this.Shoot = stats.Shoot; 
     this.fireRate = stats.fireRate; 
    } 

    public ShootDelegate Shoot; 
} 

struct GunStats 
{ 
    public ShootDelegate Shoot; 
    public double fireRate; 
} 

то, что я хотел бы быть в состоянии сделать, это оружие, как этот

GunStats stats; 
stats.fireRate = 3; 
stats.Shoot = new delegate() { this.fireRate++; /* stupid example */ }; 
new Gun(stats); 

однако, когда я создаю делегат, он, очевидно, не может взаимодействовать с внутренним классом переменные.

Каков наилучший способ справиться с этим?

+0

Создать событие для этого делегата и активаций события ... – Aravind

+0

@AravindSrinivas: Я сожалею, я не следовать вообще. –

+0

Что вы не следуете .. я не могу получить u – Aravind

ответ

2

Вы можете передать ссылку на объект Gun в делегате. Изменить делегат:

public delegate void ShootDelegate(Gun g); 

Тогда вы можете сделать это:

GunStats stats; 
Gun g = new Gun(stats); 
stats.fireRate = 3; 
stats.Shoot = new delegate(g) { g.fireRate++; }; 
+0

Или, если вы хотите попасть в «fireRate» из «GunStats», вы можете использовать ту же идею. – AnotherDeveloperNamedGreg

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