Ни как не могу понять в книге написано, что перегрузка методов невозможно с помощь 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 это не проверяет.
Комментариев нет:
Отправить комментарий