0

我以前从未遇到过这种类型的语句,任何人都可以告诉我它的功能。

Form = CardForm = MainForm;

这是一个桌面应用程序(我一般是桌面应用程序的新手)

谢谢

4

4 回答 4

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 的副作用发生x 的副作用之前,并且在该程序中,y 是从 读取的。这些都不是真的x = y = z;

于 2013-04-10T18:42:53.553 回答
2

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

假设您要设置五个变量:

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,将设置为aa然后将设置为5.

由于我们不知道 , 和 的类型CardCardForm因此MainForm我们无法准确告诉您代码将做什么,因为类型可以定义隐式转换,并且被覆盖的赋值运算符可以返回任何感觉的值(当然是那种类型的) )。

表达方式:

CardForm = MainForm

具有最终分配给 的任何内容的逻辑值CardForm。最有可能CardForm将 设置为 的值MainForm,并且该表达式本身将返回 的CardForm,然后将其设置为Form

于 2013-04-10T16:30:18.120 回答
1

假设Form,CardFormMainForm是变量...

它是 2 个赋值运算符,赋值运算符的独特之处在于它们是从右到左求值的。

首先它设置CardFormMainForm,然后设置FormCardForm = MainForm

于 2013-04-10T16:29:54.633 回答
1

Given Form,CardFormMainForm实际上是variables,但由于命名约定不太可能推荐它们使用 camelCase 格式:

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

CardForm = MainForm;
Form = MainForm;

注意=右操作(赋值顺序)。

=在 C# 中不能重载。因此,必须是一项任务,并且此行没有特定于桌面应用程序的方面。

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

于 2013-04-10T16:30:41.453 回答