2011-04-26 30 views
1

我的问题对于那些熟悉这项工作的人来说非常简单。 这段代码是如何逐行读取的,特别是3个注释的代码?阅读小c#代码的行数和它们的含义

private formMain parent = null; //explanation 1 
public formChild(formMain parent) //explanation 2 
{ 
    InitializeComponent(); 
    this.parent = parent; //explanation 3 
} 

我thougths: - 解释1:创建formMain具有空值的参考父。这'空'我真的不知道这是什么意思,我想解释一下。也许是空值,因为它必须在使用前初始化? - 解释2:在子窗体的构造函数中传递父窗体的对象? - 解释3:this.parent引用私有成员(位于第一行),并且= parent引用构造函数的参数列表中的成员?

而在父窗体中,当初始化子窗体在(formMain父窗体)的构造函数中传递(this)时,会有小代码,我认为它传递了当前窗体。

我在网上找到的这段代码,它工作的很完美,它用于从子窗体访问父窗体的属性。 任何帮助将不胜感激,在此先感谢。

P.S.请评论使用这种模板: - 说明1: - 说明2: - 解释3:

+3

这是功课? – Skurmedel 2011-04-26 13:05:17

+1

从一本好的c#书开始 – 2011-04-26 13:06:32

+0

@Skurmedel,是的它是:( – dex 2011-04-26 13:10:15

回答

2
  • 说明1:您正在创建一个名为parent持有一些变量。它将容纳的“东西”是formMain。通过将它设置为null,你说你还没有具体的formMain,但你知道你最终应该有一个。
  • 解释2:您正在创建一个创建formChild实例的方法。此对象(formChild)依赖于formMain。尽管依赖与名称解释1具有相同的名称,但它们并不相同(尚未)。
  • 解释3:从解释1中将外部传入的formMain(称为parent(来自解释2))分配给内部存储的parent。现在,刚刚创建的对象中的其余方法可引用外部依赖关系。

所以,你会使用这个代码的方式是这样的

//from a formMain type object. 
formChild childForm = new formChild(this); 

//from the formChild object 
this.parent.Title = "Title of parent being changed from child" 
+0

完美的解释,非常感谢。 – dex 2011-04-26 13:13:47

+0

一注;声明时将'parent'赋给'null'是多余的。当声明一个变量而不分配一个值时,它具有“default”,对于所有的参考类型,比如forms,它是null。 – KeithS 2011-04-26 14:23:19

0

我像这样使用时,我是很新的评论,但一段时间后,你疯了这个与评论的水平而是解释功能/部件的目的是什么。

IE你不需要解释你设置Partent = null,因为代码已经说过,你解释了为什么你将它设置为null。

+0

什么是“stupod”? – 2011-04-26 13:09:01

+0

愚蠢改变它疯了。 – EKS 2011-04-26 13:10:39

+0

我问为什么它设置为NULL,我知道它的设置:) 也许我mispointed或者你误会,请不要介意,我得到了答案:d感谢所有反正 – dex 2011-04-26 13:21:37

0

说明#2是正确的(并且#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 
} 
+0

谢谢回答 – dex 2011-04-26 13:16:46

0

的子窗体构造函数设定参考其父。

关于使用“this”。如果构造函数包含赋值,则会出现问题。

parent = parent; //this is circular 

为了引用私人同名申请(外部构造),“这”是预先计划:

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. 
    } 

} 
+0

是的,我们都在赶时间,我们正在学习2周1周,所以这就是为什么我失去了一些积分,但由于大家对我的帮助 – dex 2011-04-26 13:18:53

+0

那空也使我的问题,所以它musn't键入,因为它是在默认情况下,如果我很好理解。 好的解释,谢谢你的努力。 – dex 2011-04-26 13:25:26