重複の可能性:
代入ステートメントが値を返すのはなぜですか?
C#では、次のようにプロパティをlrvalueとrvalueの両方として同時に使用できます。
int n = N = 1;
これが完全なC#サンプルです:
class Test
{
static int n;
static int N
{
get { System.Console.WriteLine("get"); return n; }
set { System.Console.WriteLine("set"); n = value; }
}
static void Main()
{
int n = N = 1;
System.Console.WriteLine("{0}/{1}", n, N);
}
}
代入式「N=1」の結果の型はvoidであるため、 C ++/CLIではこれを行うことはできません。
EDIT1:これはこれを示すC ++ / CLIサンプルです:
ref class A
{
public: static property int N;
};
int main()
{
int n = A::N = 1;
System::Console::WriteLine("{0}/{1}", n, A::N);
}
EDIT2:さらに、これは本当に紛らわしいです:私が期待していたのは、ゲッターがnに割り当てるために呼び出されるということでしたが、これはまったく当てはまりません。nは、式の右端の値を直接受け取ります。つまり、生成されたCILで示されるような1です。
IL_0001: ldc.i4.1
IL_0002: dup
IL_0003: call void Test::set_N(int32)
IL_0008: nop
IL_0009: stloc.0
では、 void式を右辺値として使用できるようにするC#構文の背後にある魔法は何ですか?
この特別な扱いはプロパティでのみ利用できますか、それともこのような他のC#のトリックを知っていますか?
編集:指摘されているように、C#の代入規則では、代入の戻り値として常に右辺値を使用する必要があるとされています。