所以我试图从其父表单访问我的子表单的公共成员变量。该表单有一个公共get属性,我试图从中访问该变量。以下是我的子表单中定义变量的方式:
public partial class frmNewProduct : Form
{
public Inventory _inventory { get; private set; }
现在让我们改变节奏并转到父表格。子窗体的实例在下面创建,您也可以看到我尝试从该实例访问_iventory的get属性,但每次都会收到编译器错误。
private void btnAdd_Click(object sender, EventArgs e)
{
Form newProduct = new frmNewProduct(_inventory, Mode.add);
newProduct.Show();
Inventory variable = newProduct._inventory;
}
编译器错误读取以下内容:
错误1'System.Windows.Forms.Form'不包含'_inventory'的定义,并且没有扩展方法'_inventory'接受类型'System.Windows.Forms.Form'的第一个参数可以找到(是你错过了使用指令或程序集引用?)
有谁知道这里有什么问题吗?谢谢。
答案 0 :(得分:4)
您正在创建一种父类型表单。您需要将其声明为派生类型frmNewProduct。 E.g:
frmNewProduct newProduct = new frmNewProduct(_inventory, Mode.add);
newProduct.Show();
Inventory variable = newProduct._inventory;
澄清:您正在向继承自Form的类型frmNewForm添加属性。表单没有属性,因此在将变量声明为Form类型时无法访问它。
另一个例子:
class BaseClass {
}
class DerivedClass : BaseClass {
public int MyProperty { get; set; }
}
使用上面的代码,你不能这样做:
BaseClass base = new DerivedClass();
base.MyProperty = 12; // ERROR
..但是,你可以这样做:
DerivedClass derived = new DerivedClass();
derived.MyProperty = 12; // Works