我以前从未遇到过这种类型的语句,任何人都可以告诉我它的功能。
Form = CardForm = MainForm;
这是一个桌面应用程序(我一般是桌面应用程序的新手)
谢谢
到目前为止,所有答案都包含细微的错误。让我在这里直接记录。
形式的链式赋值表达式的语义
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 的副作用发生在x 的副作用之前,并且在该程序中,y 是从 读取的。这些都不是真的x = y = z;
。
在 C# 以及许多其他语言中,将值分配给变量的行为本身会返回一个值。这称为表达式的逻辑值(或左值)。
假设您要设置五个变量:
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
,并且该表达式本身将返回 的新值CardForm
,然后将其设置为Form
。
假设Form
,CardForm
和MainForm
是变量...
它是 2 个赋值运算符,赋值运算符的独特之处在于它们是从右到左求值的。
首先它设置CardForm
为MainForm
,然后设置Form
为CardForm = MainForm
Given Form
,CardForm
和MainForm
实际上是variables,但由于命名约定不太可能推荐它们使用 camelCase 格式:
该=
运算符可以传递使用,因此该语句等效于(相当粗略,有关详细信息,请参见https://stackoverflow.com/a/15931435/17713和注释!):
CardForm = MainForm;
Form = MainForm;
注意=
是右操作(赋值顺序)。
=
在 C# 中不能重载。因此,必须是一项任务,并且此行没有特定于桌面应用程序的方面。