Страницы

Поиск по вопросам

пятница, 1 февраля 2019 г.

Перегрузка методов в C# с помощью ref

Ни как не могу понять в книге написано, что перегрузка методов невозможно с помощь ref

Хотя у меня это получилось
Another an = new Another(); int a = 0;
an.SomeMethod(a); an.SomeMethod(ref a);
class Another { public void SomeMethod(int a) { a = 1; } public void SomeMethod(ref int a) { a = 1; } }
Может быть что то не так понял ?


Ответ

Возможно, это не самый хороший перевод. Запрещена на самом деле вот такая ситуация:
class Another { public void SomeMethod(out int a) { a = 1; }
public void SomeMethod(ref int a) { a = 1; } }
Это производит ошибку CS0063
Cannot define overloaded methods that differ only on ref and out.

Причина состоит в том, что на уровне CLR out не существует, и кодируется как ref. Поэтому если бы это было разрешено, с точки зрения CLR это были бы две одинаковые сигнатуры. Отличие out от ref (то есть, то, что out-параметр обязательно должен быть инициализирован внутри метода) — внутреннее правило C#, CLR это не проверяет.

Комментариев нет:

Отправить комментарий