我想创建一个以委托形式具有可覆盖方法的类。
我基本上想创建一个界面,但每次我想让它略有不同时都不必创建一个新类。
此外,我想将委托与结构中的许多其他变量捆绑在一起。
现在这里有一些更具体的细节。
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 :(得分: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++; };