gpt4 book ai didi

c# - 抽象类和虚方法: cannot access certain variables

转载 作者:行者123 更新时间:2023-12-02 12:52:22 25 4
gpt4 key购买 nike

我正在使用抽象类和虚拟方法。目前,我有一个由按钮单击和两个多行文本框组成的窗口窗体,我在其中显示结果。基类有一个默认构造函数和一个接受基类所需的所有必要数据的构造函数。有两个类 TreesTomatoes,它们有一个默认构造函数和一个传递所有数据的构造函数。我能够在 textBox1 中显示商品名称库存数量价格

但是,我无法为 Trees 调用和显示名为 tree_height 的高度变量以及名为 Tomatoes 的大小和每台西红柿的变量tomatoes_perplattomatoes_size。它给我错误不包含这些变量的定义。我该如何解决这个问题?

代码

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

public abstract class Plants
{
public string the_name;
public double num_stock;
public double price_peritem;
public double total_item_value;

public Plants(string new_name, int new_stock, double new_price)
{
the_name = new_name;
num_stock = new_stock;
price_peritem = new_price;
}

public override string ToString()
{
return "";
}

public virtual double Get_Value()
{
double s = 0;
return s;
}


}

public class Trees : Plants
{
double tree_height;
public Trees(string new_name, int new_stock, double new_price, double new_height)
: base(new_name, new_stock, new_price)
{
tree_height = new_height;
total_item_value = num_stock * price_peritem;
}

public override string ToString()
{
string s = "Tree" + " " + num_stock + " " + the_name + " " + price_peritem + " " + tree_height ;
return s;
}

public override double Get_Value()
{
total_item_value = num_stock * price_peritem;
return total_item_value;
}

}

public class Tomatoes : Plants
{

string sizeoftomato;
int tomatoesinpat;

public Tomatoes(string new_name, int new_stock, double new_price, int tomatoes_perplat, string tomatoes_size)
: base(new_name, new_stock, new_price)
{
tomatoesinpat = tomatoes_perplat;
sizeoftomato = tomatoes_size;
total_item_value = num_stock * price_peritem;
}

public override string ToString()
{
string s = "Tomatoes" + " " + num_stock + " " + the_name + " " + price_peritem;
return s;
}

public override double Get_Value()
{

total_item_value = num_stock * price_peritem;
return total_item_value;
}
}



public void Report()
{

Trees trees1 = new Trees("Oak", 3, 14.40, 2);
const string format = "{0,-26} {1,-25} {2,-25} {3,-25}";
string trees1_result = String.Format(format, "Tree", trees1.the_name, trees1.num_stock, trees1.price_peritem, trees1.tree_height); //not showing `tree_height`
textBox1.AppendText(trees1_result + Environment.NewLine);
textBox2.AppendText(trees1.Get_Value() + Environment.NewLine);

Tomatoes tomatoes1 = new Tomatoes("Big Boy", 30, 10, 12, "Large");
const string format2 = "{0,-26} {1,-25} {2,-25} {3,-25}";
string tomatoes1_result = String.Format(format2, "Tomatoe", tomatoes1.the_name, tomatoes1.num_stock, tomatoes1.price_peritem, tomatoes1.tomatoes_perplat, tomatoes1.tomatoes_size); //not showing `tomatoes_perplat` or `tomatoes_size`
textBox1.AppendText(tomatoes1_result + Environment.NewLine);
textBox2.AppendText(tomatoes1.Get_Value() + Environment.NewLine);

}

private void button1_Click(object sender, EventArgs e)
{
Report();
}

}
}

最佳答案

好的,现在我已经对代码进行了一些编译,它更清晰了......

您无法访问 trees1.tree_height,因为它在 Trees 类中是私有(private)的,并且您正尝试从 Form1 中的方法访问它 类。

您无法从该方法访问 tomatos_perplat,因为 Tomatoes 类中没有这样的变量 - 有 tomatoesinpat,但它也是私有(private)的。

同上tomatoes_size - 该字段称为sizeoftomato,并且是私有(private)的。

将您的字段保持私有(private)是一个主意 - 我不建议将它们公开。相反,您应该公开 properties在类之间公开数据。您可以使用automatically implemented properties作为实现非常简单的属性的简单方法。

不过,我强烈鼓励您为自己的组织工作:

  • 不要对所有内容都使用嵌套类;它们偶尔很方便,但通常最好有单独的顶级类

  • 阅读.NET naming conventions并关注他们

  • 想想您的方法想要实现什么目标 - 像您的 Get_Value 方法这样的事情目前毫无意义

  • 强烈您尝试使用控制台应用程序。它们不像 GUI 那样“令人兴奋”,但更容易理解和实验。

关于c# - 抽象类和虚方法: cannot access certain variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12981437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com