Говорят, что экземпляр производного класса, наследующийся от абстрактного (класса, интерфейса), принято приводить к базовому типу. Почти всегда.
Часто это объясняют тем, что так мы показываем суть нашего объекта.
Пример
Файл Interface1.cs
namespace Interfaces
{
interface Interface1
{
void Method1();
}
}
Файл Interface2.cs
namespace Interfaces
{
interface Interface2
{
void Method2();
}
}
Файл Program.cs
namespace Interfaces
{
class Program
{
class DerivedClass : Interface1, Interface2
{
public void Method1(){Console.WriteLine("Реализация Method1 из Interface1");}
public void Method2(){Console.WriteLine("Реализация Method2 из Interface2");}
}
static void Main()
{
Interface1 instance1 = new DerivedClass();
Interface2 instance2 = new DerivedClass();
//DerivedClass instance = new DerivedClass();
instance1.Method1();
//instance1.Method2(); нельзя
instance2.Method2();
//instance1.Method1(); нельзя
Console.ReadKey();
}
}
}
В коде выше, из за приведения к базовому абстрактному типу, мы вынуждены создавать 2 экземпляра класса.
Что далее частично ограничивает наши возможности (вызов методов).
Если не приводить к базовому типу то: нам понадобится 1 экземпляр класса. Мы сможем вызывать 2 метода на 1 экземпляре класса. Не нужна "лишняя" операция приведения (апкаст).
Неужели реализация не показывает сути объекта? (Ведь это тоже объект.)
И поэтому мы должны делать апкаст, писать больше кода и вводить для себя ограничения?
Почему экземпляр производного класса приводят к базовому абстрактному типу?