2016-11-26 35 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 ...