阅读小c#代码的行,它们是什么意思

时间:2011-04-26 13:02:42

标签: c# parent-child

对于那些非常了解这份工作的人来说,我的问题非常简单。 这段代码是如何逐行读取的,特别是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:

5 个答案:

答案 0 :(得分:2)

  • 解释1:您正在创建一个名为parent的变量来保存某些内容。它将持有的“东西”是formMain。通过将其设置为null,您说您还没有具体的formMain,但您知道最终应该有一个。{1}}
  • 说明2:您正在创建一个创建formChild实例的方法。此对象(formChild)依赖于formMain。即使依赖关系与解释1中的依赖关系具有相同的名称,它们也不相同(尚未)。
  • 解释3:外部传入的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.
    }

}