Собеседовался на Junior первый раз - C#
Формулировка задачи:
Всем привет.
Задали вопрос (человек из плюсов):
Существует класс
Человек
, от него наследуются (интервьюер не правильно стрелки нарисовал, поправил) классыСпортсмен
,Водитель
,Женщина
. Как мне понять что их родитель классЧеловек
, и при добавлении новых экземпляров уметь использовать их, понимая что они наследуются от него. Я говорю что через рефлексию, которая базируется на типе Type. В голове рисую вроде instance.GetType().BaseType и т.д. А работать с ними через реализацию интерфейсов (контракты). Про возможность апкаста ничего не говорил (приведение к базовому типу, интерфейсу), что бы не накидали вопросов. Мне говорят: "нет, зачем это использовать. Не правильно, надо другим способом." Думал... не знаю, не помню другого. Потом на листке бумаги он написал слово visitor (что является паттерном). И говорит, "я это хотел услышать". Можете разъяснить что имелось ввиду.Думаю что можно спросить у человека на Junior, при том что знаю нюанс - структуры могут быть на куче (хотя многие пишут не правильно даже в мануалах). При создании экземпляра класса на куче создается экземпляр и объект (разные вещи). Невозможно перехватить переполнение стека потока. etc.
Решение задачи: «Собеседовался на Junior первый раз»
textual
Листинг программы
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
public class Man
{
public virtual void Identification()
{
Console.WriteLine("This is Man");
}
}
public class Athlete : Man
{
public override void Identification()
{
Console.WriteLine("This is Athlete");
}
}
public class Driver : Man
{
public override void Identification()
{
Console.WriteLine("This is Driver");
}
}
public class Female : Man
{
public override void Identification()
{
Console.WriteLine("This is Female");
}
}
class Program
{
static void Main(string[] args)
{
var people = new List<Man> {new Man(), new Athlete(), new Driver(), new Female()};
people.ForEach(x=>x.Identification());
Console.ReadLine();
}
}
}