代表使用“这个”

时间:2013-09-18 04:10:39

标签: c# delegates

我想创建一个以委托形式具有可覆盖方法的类。

我基本上想创建一个界面,但每次我想让它略有不同时都不必创建一个新类。

此外,我想将委托与结构中的许多其他变量捆绑在一起。

现在这里有一些更具体的细节。

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);

但是,当我创建委托时,它显然无法与内部类变量进行交互。

处理此问题的最佳方法是什么?

1 个答案:

答案 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++; };