これは CLR の制限ですか、それとも言語設計上の決定ですか? もちろん、ネイティブの C++ をサポートする必要があるため、C++/CLI で実行しようとしました。
public ref class Test
{
public:
static Test^ operator &( Test^ msg, int& i )
{
i = i + 1;
return nullptr;
}
};
次に、コンパイラの省略された出力を調べました。
public: static Test __gc* op_BitwiseAnd(Test __gc* msg, Int32 __gc** modopt(IsImplicitlyDereferenced __gc*) i)
{
i[0] += 1;
return 0;
}
さらに進んで、C#プロジェクトからこの演算子を呼び出そうとしました-そしてもちろん、それを行うには[安全でない]必要がありました(ポインタが必要でした):
Test t = new Test();
int i = 0;
unsafe
{
t = t & &i;
}
CLR に実装するのは明らかにそれほど難しくありませんか? 演算子のオーバーロードでの参照渡しが本当に恋しいので、少なくとも自分自身を明らかにしたいのですが、なぜこれが欠けているのですか?
演算子のオーバーロードで参照変数を処理する必要があるときに、C# が unsafe とポインターの背後にある醜さを隠せないのはなぜですか? この醜い回避策を選択したとしても、安全でない操作が許可されていない Silverlight では機能しません...