Это ограничение 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 # не может скрыть уродство за небезопасными и указателями, когда нам нужно иметь дело со ссылочными переменными в наших перегрузках операторов? Даже если бы я выбрал этот уродливый обходной путь, он не сработает в Silverlight, где небезопасные операции запрещены ...