我有几个类似的东西:
public class Weapon
{
public static int clip;
}
public class Uzi : Weapon{}
public class Ak47 : Weapon{}
我在主代码的其他地方:
Uzi.clip = 5;
Ak47.clip = 1;
这是否有效,UZI是否有自己独特的剪辑或与AK47相同?如果不是如何实现这个?
这是上面的简化版本,我背后的内容要复杂得多,但我只需要一个想法如何做到这一点。
答案 0 :(得分:4)
没有
static
个字段在派生类中不重复
BaseClass.Field
和DerivedClass.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
不同,那么您需要再次使用不同的代码。