Страницы

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

суббота, 4 января 2020 г.

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

#c_sharp #net #ооп #методы


Ни как не могу понять в книге написано, что перегрузка методов невозможно с помощь 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;
    }
}


Может быть что то не так понял ? 
    


Ответы

Ответ 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 это не проверяет.

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

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