继承:访问父成员
本文关键字:父成员 访问 继承 | 更新日期: 2023-09-27 18:20:09
我有一个从System.Windows.Forms.Form
继承的类
public partial class RAT : Form
并且具有从RAT
继承的另一个类
class CAD : RAT
当我创建CAD
的实例时,我希望RAT
(实际上是from)的大小被更改,当我处理CAD
对象时,我想要RAT
恢复到原来的大小。
CAD
构造函数:
public CAD()
{
base.Size = new System.Drawing.Size(805, 700);
}
CAD
析构器:
~CAD()
{
base.Size = new System.Drawing.Size(805, 300);
}
但问题是,它没有执行这些代码。它没有更新表单的size
。但当我在RAT
中更新它时,它工作得很好:
CAD CADObject = new CAD();
this.Size = new System.Drawing.Size(805, 700);
我认为我正在以正确的方式访问家长班成员。那么问题出在哪里呢?
附加:
之后,我尝试从CAD
构造函数添加一个控件:
public CAD()
{
TextBox sample = new TextBox();
sample.Multiline = true;
sample.Location = new System.Drawing.Point(50, 500);
sample.Size = new System.Drawing.Size(50, 100);
base.Controls.Add(sample); //here `base` refers to `RAT` class
}
但是这个代码不能很好地工作。
整个场景:
RAT
是形式,CAD
是继承自RAT
的一个简单类。CAD
对象是在单击RAT
按钮时创建的。CAD
有一些额外的程序功能,所以我想通过向RAT
添加一些额外的控件来更新RAT
的UI,并增加其大小,然后从CAD
、methods
和properties
更新它们。
这个程序很简单。我只想从子类访问父成员。我知道我可以在RAT
中完成这一切,但我试图从儿童类访问它。这本应该奏效的。
完整代码:
namespace RAT_Controller
{
public partial class RAT : Form
{
public RAT()
{
InitializeComponent();
}
CAD CADObject;
bool CADObjectCreated = false;
private void btnCADInitializer_Click(object sender, EventArgs e)
{
if (!CADObjectCreated)
{
CADObject = new CAD();
CADObjectCreated = true;
}
else
{
CADObject.Dispose();
CADObjectCreated = false;
}
}
}
class CAD : RAT
{
public CAD()
{
base.Size = new System.Drawing.Size(805, 700); //updating form size
sample = new TextBox();
sample.Multiline = true;
sample.Location = new System.Drawing.Point(50, 500);
sample.Size = new System.Drawing.Size(50, 100);
base.Controls.Add(sample); //adding control to form
}
TextBox sample;
~CAD()
{
sample.Dispose();
base.Controls.Remove(sample); //removing control from form
base.Size = new System.Drawing.Size(805, 300); //updating form size
}
}
}
CAD
是一个全新的表单,您永远不会显示它。屏幕上的形式从未改变。不应该让CAD
从RAD
继承,而应该给它一个字段RAD form
,并通过该字段访问表单。
你还有一个可疑的终结器。它不会在你期望的时候运行,当它运行时,我怀疑它不会按照你的意愿运行。特别是,它不会在你一调用Dispose
时就被调用。
class CAD
{
RAT form;
public CAD(RAT form)
{
this.form = form;
// Now the CAD class maintains a reference to the form it is
// supposed to change. This field can be used in other methods
// when it is time to remove the extra controls and restore
// the size, like so:
// form.Size = new System.Drawing.Size(805, 300);
}
}