0

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

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

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

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

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

但是,当我创建委托时,它显然不能与内部类变量交互。

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

4

1 回答 1

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++; };
于 2013-09-18T04:21:15.360 回答