C#parent子静态变量访问

时间:2012-08-29 13:30:07

标签: c# inheritance

我有几个类似的东西:

public class Weapon
{
    public static int clip;
}

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

我在主代码的其他地方:

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

这是否有效,UZI是否有自己独特的剪辑或与AK47相同?如果不是如何实现这个?

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

3 个答案:

答案 0 :(得分:4)

没有

static个字段在派生类中不重复 BaseClass.FieldDerivedClass.Field汇编到同一个IL。

答案 1 :(得分:1)

首先,继承

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

然后,类x实例变量。

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

因此,为了实现您的目标,请删除static修饰符。

答案 2 :(得分: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不同,那么您需要再次使用不同的代码。