对于那些非常了解这份工作的人来说,我的问题非常简单。 这段代码是如何逐行读取的,特别是3条评论的代码?
private formMain parent = null; //explanation 1
public formChild(formMain parent) //explanation 2
{
InitializeComponent();
this.parent = parent; //explanation 3
}
我的思想: - 解释1:创建具有空值的formMain的引用父级。那个'空'我真的不知道它是什么意思,我想解释一下。也许是一个空值,因为它必须在使用前初始化? - 解释2:在子表单的构造函数中传递父表单的对象? - 解释3:this.parent引用私有成员(在第一行)和= parent引用构造函数的参数列表中的成员?
在父表单中初始化子表单时,在(formMain parent)的构造函数中传递(this)时会有一些小代码,我认为它正在传递当前表单。
这是我在互联网上找到的代码,它运行良好,用于从子窗体访问父窗体的属性。 任何帮助将不胜感激,提前谢谢。
P.S。请使用这种模板发表评论: - 解释1: - 解释2: - 解释3:
答案 0 :(得分:2)
parent
的变量来保存某些内容。它将持有的“东西”是formMain
。通过将其设置为null
,您说您还没有具体的formMain
,但您知道最终应该有一个。{1}} formChild
实例的方法。此对象(formChild
)依赖于formMain
。即使依赖关系与解释1中的依赖关系具有相同的名称,它们也不相同(尚未)。 formMain
parent
(来自解释2)被分配给内部存储的parent
来自解释1.现在其余的方法在刚刚创建的对象可以引用外部依赖项。 所以你使用这段代码的方式是这样的
//from a formMain type object.
formChild childForm = new formChild(this);
//from the formChild object
this.parent.Title = "Title of parent being changed from child"
答案 1 :(得分:0)
当我很新的时候,我常常这样评论,但是过了一段时间,你就用评论的水平疯狂了,而是解释一下函数/部分的用途是什么。
IE你不需要解释你设置Partent = null,因为代码已经说明了,你解释了为什么你将它设置为null。
答案 2 :(得分:0)
解释#2是正确的(#3也非常接近)。
子表单通过将其分配给私有成员变量来保持对其父级的引用。您希望保留引用的主要原因是为了与父进行通信,或者以父表单的形式访问公共属性或函数。
答案 3 :(得分:0)
1:初始化变量或对象永远不是一个坏主意。除非你知道你希望变量具有null
的初始值通常是更好的选择(在大多数情况下,替代方案是具有一些你不知道的随机值)。
2:该行声明了一个函数/方法,它接受一个formMain类型的参数。在这种情况下,它被称为parent
3:此行将私有成员parent
设置为等于传递给函数的参数parent
。它们的关键字this
表示类中包含的元素。
更容易理解的重写可能如下所示:
private formMain parent = null; //explanation 1
public formChild(formMain element) //explanation 2
{
InitializeComponent();
this.parent = element; //explanation 3
}
答案 4 :(得分:0)
子表单的构造函数正在设置对其父表单的引用。
关于“this”的使用。如果构造函数包含赋值,则会出现问题。
parent = parent; //this is circular
为了引用同名的私人文件(在构造函数之外),'this'是预先填写的:
this.parent = parent; //assign the value of the param to the private field
其他评论。这种风格似乎是从Java借来的,对C#来说并不典型。
class FormChild
{
private FormParent _parent; //reference types are automatically null
public FormChild( FormParent parent)//pass in the reference to the parent
{
InitializeComponent();
_parent = parent; //assign the reference param to the private field.
}
}