русский
Germany.ruForen → Архив Досок→ Programmierung

Резюме для программиста

08.09.21 09:03
Re: Резюме для программиста
 
alex445 свой человек
in Antwort alex445 08.09.21 08:35, Zuletzt geändert 08.09.21 09:12 (alex445)
Кстати, вот тут из списка Каверзные вопросы по C# / Habr задачка 2 непонятна. Как я понимаю, базовый метод скрывается в унаследованном классе, поэтому передаваемый int приводится к double в функции наследующего класса и вызывается собственно эта функция, а не из базового класса? Т.е. тут главное, что метод скрывается, а потом уже работает приведение типов, причём неявное.


А вот если поменять тип, и передать дабл в метод, который в классе В бы принимал инт, то компилятор выдал бы предупреждение о нужности явной конверсии при передаче параметра, как я понимаю? Тут надо знать заранее, а не проверять на деле, т.к. на собесе перед вами только листочек с вопросами.

Нифига. Сейчас проверил. Если поменять инт и дабл местами в типах параметров методов, и передать в вызванный метод дабл, то будет вызвать метод базового класса. Значит, приведение типов влияет на выбор метода в группе - если возможно неявное приведение, то оно будет выполнено и методы базовых классов рассматриваться не будут. А если невозможно, то будут. А если сделать явное приведение, то опять будет работать правило с неявным приведением:


class Program
{
    static void Main(string[] args)
    {
        Child c = new Child();
        c.Foo((int)10.10);
    }
}

class Parent
{
    public void Foo(int x)
    {
        Console.WriteLine("Parent.Foo(int x)");
    }
}

class Child : Parent
{
    public void Foo(double y)
    {
        Console.WriteLine("Child.Foo(double y)");
    }
}


Здесь выводится "Child.Foo(double y)". Как я понимаю, компилятор после моей явной конверсии из дабла в инт делает потом неявную из инта обратно в дабл и применяет метод из класса потомка.


Короче, показанная здесь и в таком виде иерархия классов - зло. Слишком много магии происходит по всяким "соглашениям", знание которой и проверяют такие задачки.

 

Sprung zu