-1

我有几门课是这样的:

public class Weapon
{
    public static int clip;
}

public class Uzi : Weapon{}
public class Ak47 : Weapon{}

我在主代码的其他地方:

Uzi.clip = 5;
Ak47.clip = 1;

这行得通吗,UZI 会有自己独特的夹子还是和 AK47 一样?如果不是如何实现这一点?

这是上面的简化版本,我后面的内容要复杂得多,但我只需要一个如何做到这一点的想法。

4

3 回答 3

4

不。

static派生类中的字段不重复。
BaseClass.FieldDerivedClass.Field编译为相同的 IL。

于 2012-08-29T13:31:30.480 回答
1

一是继承

为了Uzi成为 a Weapon,它必须从其基类继承。即 ,Uzi : Weapon对于 Ak47 也是如此。

然后,类 x 实例变量。

当您将属性声明为static时,它是一个变量。也就是说,它不属于该类的实例(对象),而是属于该类本身。所以,如果你有一个Uzi和一个Ak47,并且你说MyUzi.clip = 20;MyAk47将具有相同的值。

因此,为了实现您正在寻找的内容,请删除static修饰符。

于 2012-08-29T13:34:13.067 回答
1

为什么不试试呢?

它不起作用,因为两者都指的是同一个clip. (这里没有区别,但如果它是一个字符串,你可以测试并证明它们是同一个对象)。

你能做的最好的事情是:

public abstract class Weapon
{
  public abstract int Clip{get;}//though my bow and sword are both weapons and neither has a clip...
}

public class Uzi : Weapon
{
  public override int Clip
  {
    get { return 5; }
  }
}
public class Ak47 : Weapon
{
  public override int Clip
  {
    get { return 1; }
  }
}

如果您希望单个武器具有Clip不同的代码,那么您需要再次使用不同的代码。

于 2012-08-29T13:34:45.617 回答