我之前从未遇到过这种类型的陈述,任何人都可以启发我的功能。
Form = CardForm = MainForm;
这是一个桌面应用程序(我通常不熟悉桌面应用程序)
由于
答案 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
,将设置为d
。 d = 5
的值为5
,将设置为c
。 c = 5
的值为5
,将设置为b
。 b = 5
的值为5
,将设置为a
。然后a
将设置为5
。
由于我们不知道Card
,CardForm
和MainForm
的类型,我们无法确切地告诉您代码将执行哪些操作,因为类型可以定义隐式转换,并且重写的赋值运算符可以返回它感觉的任何值(当然是那种类型)。
表达式:
CardForm = MainForm
具有逻辑值,其中包含最终分配给CardForm
的内容。最有可能的是,CardForm
将设置为MainForm
的值,该表达式本身将返回{em>新值CardForm
,然后将其设置为Form
。
答案 2 :(得分:1)
假设Form
,CardForm
和MainForm
是变量......
它是2个赋值运算符,赋值运算符是唯一的,因为它们是从右到左进行计算的。
首先将CardForm
设置为MainForm
,然后将Form
设置为CardForm = MainForm
的结果
答案 3 :(得分:1)
鉴于Form
,CardForm
和MainForm
实际上是变量,但由于命名约定而不太可能建议将它们放在camelCase中:
=
运算符可以被传递使用,因此这个语句相当于(非常粗略,有关详细信息,请参阅https://stackoverflow.com/a/15931435/17713和注释!):
CardForm = MainForm;
Form = MainForm;
请注意=
右操作(分配顺序)。
=
无法在C#中重载。因此,必须是一个赋值,并且此行没有特定于桌面应用程序的方面。