【发布时间】:2010-12-11 21:44:27
【问题描述】:
这是 CLR 限制还是语言设计决定?我尝试在 C++/CLI 中执行此操作,当然它可以工作,因为需要支持本机 c++:
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 中工作,因为不允许不安全的操作......
【问题讨论】:
标签: c# clr c++-cli operator-overloading command-line-interface