-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.Field同じILにDerivedClass.Fieldコンパイルします。

于 2012-08-29T13:31:30.480 に答える
1

まず、継承

Uziなるには、基本クラスから継承するWeapon必要があります。つまり、Ak47の場合はそうです。Uzi : Weapon

次に、クラスxインスタンス変数。

プロパティをとして宣言するとstatic、それはクラス変数になります。つまり、そのクラスのインスタンス(オブジェクト)に属しているのではなく、クラス自体に属しています。したがって、1つとUzi1つがあり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 に答える