Form = Form = Form,声明做什么?

时间:2013-04-10 16:28:00

标签: c# winforms .net-4.0

我之前从未遇到过这种类型的陈述,任何人都可以启发我的功能。

Form = CardForm = MainForm;

这是一个桌面应用程序(我通常不熟悉桌面应用程序)

由于

4 个答案:

答案 0 :(得分:17)

到目前为止,所有答案都包含细微的错误。让我在这里直接记录。

表单

的链式赋值表达式的语义
x = y = z

是:

  • 评估第一个表达式x,y和z,并按顺序生成它们的副作用(如果有的话)。

  • 其次,通过评估z生成的值将转换为与表达式y关联的类型。将此值称为z1。请注意,这可能不是z的值;可能涉及转换。

  • 第三,执行将z1分配给y的副作用。

  • 第四,z1被转换为与表达式x相关联的类型。将此值调用为z2。同样,z2不必与z1或z相同。

  • 第五,z2被分配给x。

总结一下,这有以下语义:

side effects of x
side effects of y
side effects of z
z1 = value of z converted to type of y
y = z1 
z2 = value of z1 converted to type of x
x = z2

其他一些答案试图告诉您x = y = z;的语义只是y = z; x = y;完全错误的语义。在该程序中,y和z的副作用在之前发生,而在该程序中, y从读取。在x = y = z;中都没有这些。

答案 1 :(得分:2)

在C#以及许多其他语言中,为变量赋值的行为本身会返回一个值。这称为表达式的逻辑值(或l值)。

假设您想设置五个变量:

int a, b, c, d, e;

到数字5.您可以这样做:

a = b = c = d = e = 5;

表达式e = 5的值为5,将设置为dd = 5的值为5,将设置为cc = 5的值为5,将设置为bb = 5的值为5,将设置为a。然后a将设置为5

由于我们不知道CardCardFormMainForm的类型,我们无法确切地告诉您代码将执行哪些操作,因为类型可以定义隐式转换,并且重写的赋值运算符可以返回它感觉的任何值(当然是那种类型)。

表达式:

CardForm = MainForm

具有逻辑值,其中包含最终分配给CardForm的内容。最有可能的是,CardForm将设置为MainForm的值,该表达式本身将返回{em>新CardForm,然后将其设置为Form

答案 2 :(得分:1)

假设FormCardFormMainForm是变量......

它是2个赋值运算符,赋值运算符是唯一的,因为它们是从右到左进行计算的。

首先将CardForm设置为MainForm,然后将Form设置为CardForm = MainForm的结果

答案 3 :(得分:1)

鉴于FormCardFormMainForm实际上是变量,但由于命名约定而不太可能建议将它们放在camelCase中:

=运算符可以被传递使用,因此这个语句相当于(非常粗略,有关详细信息,请参阅https://stackoverflow.com/a/15931435/17713和注释!):

CardForm = MainForm;
Form = MainForm;

请注意= 右操作(分配顺序)。

=无法在C#中重载。因此,必须是一个赋值,并且此行没有特定于桌面应用程序的方面。

另请参阅:http://msdn.microsoft.com/en-us/library/sbkb459w.aspx