2016-11-26 68 views
1

對於我這周在課堂上的作業,我們要重載「倉庫構造函數」。第一步是建立0收音機,計算機和帶有構造函數的電視機的倉庫類。還應該有按鈕添加到每個項目的庫存。所有的起始庫存應爲0.我不確定是否正確執行了此操作。如何使用構造函數重載來創建2個獨立的「倉庫」?

然後,我們必須重載該構造函數,並使用預先指定的數字創建倉庫。我做到了這一點,但當我打電話給我的第一個倉庫時,我的收音機數量爲0 ...

我對這個主題非常困惑,並期待看看有人能幫助更好地解釋我的問題是什麼?這將非常感激。

這裏是我的倉庫類:

class warehouse 
    { 
     private static int radios, televisions, computers; 

     public warehouse (int r, int t, int c) 
     { 
      r = Radios; 
      t = Televisions; 
      c = Computers; 
     } 

     public warehouse() 
     { 
      radios = 5; 
      televisions = 5; 
      computers = 5; 
     } 

     warehouse one = new warehouse(5, 6, 5); 
     warehouse two = new warehouse(); 

     public static int Radios 
     { 
      get 
      { 
       return radios; 
      } 

      set 
      { 
       radios = value; 
      } 
     } 

     public static int Televisions 
     { 
      get 
      { 
       return televisions; 
      } 

      set 
      { 
       televisions = value; 
      } 
     } 

     public static int Computers 
     { 
      get 
      { 
       return computers; 
      } 

      set 
      { 
       computers = value; 
      } 
     } 



    } 
} 

然後接下來是我用來顯示倉庫形式。

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private static int R, C, T; 

     public static int R1 
     { 
      get 
      { 
       return R; 
      } 

      set 
      { 
       R = value; 
      } 
     } 

     public static int C1 
     { 
      get 
      { 
       return C; 
      } 

      set 
      { 
       C = value; 
      } 
     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      textBox1.Text = warehouse.Radios.ToString(); 
     } 

     public static int T1 
     { 
      get 
      { 
       return T; 
      } 

      set 
      { 
       T = value; 
      } 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

     } 
    } 
} 

我打算在一個單獨的文本框以顯示在倉庫每個項目,然後具有低於按鈕在每個按鈕的按1添加到庫存。

截至目前,當我按下顯示倉庫時,只有一個零彈出。

+3

首先要解決:你的領域和屬性都是靜態的。當你在構造函數中初始化它們時,這很奇怪。第二件事要解決 - 你在構造函數中的賦值是錯誤的......你將屬性賦值給參數*。下一步:瞭解自動實現的屬性,以便您的每個12行屬性都可以在一行中實現... –

+0

另外我認爲您想在表單測試代碼中創建倉庫對象,而不是在倉庫內部(除非他們存儲娃娃娃,也許) – Plutonix

回答

0

在這部分...

public warehouse (int r, int t, int c) 
    { 
     r = Radios; 
     t = Televisions; 
     c = Computers; 
    } 

...你正在對轉讓的左側和屬性右邊的參數。這意味着你用屬性值(用默認值0初始化)覆蓋參數。你沒有設置任何財產。你必須反過來:從參數中設置屬性。

0

你需要做的第一件事就是不創建對象,不能重寫類成員的值。在這裏,你應該在你的倉庫類的內部創建對象Form1類然後每件事情都會正常工作。

public warehouse (int r, int t, int c) 
{ 
    r = Radios; 
    t = Televisions; 
    c = Computers; 
} 

這裏你是以錯誤的方式分配值我想。應該給你的屬性,而不是參數賦值。

0

倉庫類:

class Warehouse 
{ 
    private int radios, televisions, computers; 

    public int Radios 
    { 
     get { return radios; } 
     set { radios = value; } 
    } 

    public int Televisions 
    { 
     get { return televisions; } 
     set { televisions = value; } 
    } 

    public int Computers 
    { 
     get { return computers; } 
     set { computers = value; } 
    } 

    public Warehouse(int radios, int televisions, int computers) 
    { 
     this.radios = radios; 
     this.televisions = televisions; 
     this.computers = computers; 
    } 

    public Warehouse() : this(5, 5, 5) { } 
} 

這裏,字段和屬性是非靜態的(實例成員)。靜態成員在全球範圍內維護,意味着將只有一個副本,因此您不能擁有多個倉庫。實例成員作爲每個實例(每個對象)的單獨副本維護,因此您可以維護多個倉庫。

如果需要,可以將屬性定義爲自動實現的屬性。

示例表:

public partial class Form1 : Form 
{ 
    private Warehouse warehouse1; 
    private Warehouse warehouse2; 

    public Form2() 
    { 
     InitializeComponent(); 

     warehouse1 = new Warehouse(); 
     warehouse2 = new Warehouse(6, 7, 8); 
    } 

    private void button1_Click(object sender, System.EventArgs e) 
    { 
     textBox1.Text = warehouse1.Radios.ToString(); 
     textBox2.Text = warehouse1.Televisions.ToString(); 
     textBox3.Text = warehouse1.Computers.ToString(); 
    } 

    private void button2_Click(object sender, System.EventArgs e) 
    { 
     textBox1.Text = warehouse2.Radios.ToString(); 
     textBox2.Text = warehouse2.Televisions.ToString(); 
     textBox3.Text = warehouse2.Computers.ToString(); 
    } 
} 

在這裏,當你點擊按鈕1,warehouse1的細節將在文本框中顯示的,並BUTTON2 warehouse2 ...