0

たとえば、作成したオブジェクトを処理するクラスがあります。

StockItem2 = new CarEngine("Mazda B6T", 1252, 8025, 800, "Z4537298D");
//StockItem2 = new CarEngine("description", cost, invoice #, weight, engine #)

また、最後の請求書番号を 10,000 に設定する静的な int もあります。

 internal static int LastStockNumber = 10000; 

請求書番号が入力されていない場合は、1 つを自動割り当てし、毎回 1 ずつ増やしたいので、10,001 / 10,002 など..

CarEngine には 2 つのコンストラクターがあります。これは、請求書番号が入力されていない場合に、請求書番号を割り当てるためのものです。説明、コスト、重量、エンジン番号を取得し、10,001 以降は自動割り当てする必要がありますが、一度に 2 ~ 3 ずつ増加しているように見えますが、その理由は何ですか?

public CarEngine(string Description, int CostPrice, int Weight, string EngineNumber)
        : base(Description, CostPrice, Weight)
    {
        LastStockNumber++;
        StockNumber = LastStockNumber;
        this.CostPrice = CostPrice;
        this.Description = Description;
        this.Weight = Weight;
        this.EngineNumber = EngineNumber;
    }

// this is in the stockitem class //
public StockItem(string Description, int CostPrice)
    {
        LastStockNumber++;
        StockNumber = LastStockNumber;            
        this.Description = Description;
        this.CostPrice = CostPrice;
    }
//this is in the heavystockitem class//
public HeavyStockItem(string Description, int CostPrice, int Weight) :     base(Description, CostPrice)
    {

        StockNumber = LastStockNumber;
        LastStockNumber++;
        this.CostPrice = CostPrice;
        this.Description = Description;
        this.Weight = Weight;
    }
4

2 に答える 2

2

基本クラスと派生クラスのコンストラクターで LastStockNumber をインクリメントしている可能性があります。

于 2013-10-02T05:23:27.170 に答える
1

あなたのCarEngine継承元HeavyStockItemが継承元であることを考えると、署名から推測していますStockItem

これにより、新しいCarEngineオブジェクトを作成するときに、独自の基本コンストラクターを呼び出す基本コンストラクターが呼び出されます。

各コンストラクターには次のコードがあるLastStockNumber++;ため、 aCarEngineの場合、数値は 3 回インクリメントされ、 a のHeavyStockItem場合は 2 回インクリメントされ、 a のStockItem場合は 1 回だけインクリメントされます。

基本コンストラクターを呼び出していることを考えると、クラスに固有のもののみを初期化する必要があります。コードを次のように変更してみてください。

public CarEngine(string description, int costPrice, int weight, string engineNumber)
    : base(description, costPrice, weight)
{
    EngineNumber = engineNumber;
}

//this is in the heavystockitem class//
public HeavyStockItem(string description, int costPrice, int weight)
    : base(description, costPrice)
{

    Weight = weight;
}

// this is in the stockitem class //
public StockItem(string description, int costPrice)
{
    LastStockNumber++;
    StockNumber = LastStockNumber;
    Description = description;
    CostPrice = costPrice;
}

おまけとして、一般的に受け入れられている C# 標準に従って、コンストラクターのパラメーターを PascalCase から camelCase に変更したことに注意してください。これは、プロパティ (最初の文字が大文字) とパラメーター (最初の文字が小文字) を区別するのに役立ちます。

于 2013-10-02T05:42:11.597 に答える