假设您有 2 种形式:FormA 和 FormB..
在 FormA 中我有一些属性。 FormA 创建 FormB 并设置所有者属性。例如:
public FormA()
{
FormB = new FormB(){Owner = this};
}
现在,在 FormB 中,如果我想访问我在 FormA 上声明的属性。 为什么我在写作时看不到它们:
Owner. // here I need to see FormA properties...
为什么它不能像这样工作?
最佳答案
因为继承和多态你看不到。
在 .NET 中,Forms 继承自一个名为 Form 的基类。你的 FormA 是从 Form 派生的类,FormB 也是。
现在,Form 引用了 Owner 表单,
public Form Owner { get; }
您为其分配了一个 FormA。没问题!派生类可以被视为它们的基类。但是,如果您访问它,您会得到一个表单,因此您需要做的是将新表单转换回您实际提供的表单:
FormA form = (FormB)Owner;
这几乎和做的一样:
FormA form = Owner as FormB;
但是有一些注意事项。 as
运算符是一个“安全转换”,如果对象不是提供的类型,它会返回空值。
我建议您仅使用我们提供的代码,并在有时间时学习继承和多态性。它们是了解正在发生的事情的关键。
如果我可以做一些 self 推销,我 wrote a piece关于为什么您通常会及时避免使用 as
,您可能会发现它很有趣。
关于c# - Winforms 中的所有者表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15420939/