How to C# Professional. Ad hoc полиморфизм.
Вставка
- Опубліковано 14 лют 2017
- Промокод на скидку 15% на все курсы ITVDN- H94BCAB
Коллекция уроков How to C# Professional itvdn.com/ru/video/how-to-csh...
В данном видео был рассмотрен такой подход в программировании на языке С#, как Ad hoc полиморфизм.
Благодарим всех за лайки, репосты, добавление в избранное!
itvdn.com - видеопортал по обучению программированию
А также подписывайтесь на нас в социальных сетях:
itvdn
/ itvdn.edu
/ itvdn
/ itvdn
plus.google.com/u/0/+ItvdnEDU...
Свои предложения присылайте на почту: support@itvdn.com
Круто!
Интересная вещь... но ИМХО если задуматься этот паттерн называется адаптер.. особенно если рассматривать кейс со сторонней dll-кой. А на счет запечатанного класса и динамического массива, тем более лучше сделать класс-обертку а дальше через интерфейс...
В случае когда классы в либе закрыты от наследования, но содержат публичный конструктор, я бы сделал обобщенный класс, с композицией в публичном конструкторе без параметров, но ни в ком случае не стал бы использовать dynamic. Этот гад неимоверно медленный
Вызов же самого метода происходит в самом цикле
P.S. Побоялся быть неправильно понятым, перечитав собственное описание, поэтому решил написать небольшой псевдокод.
P.S.S. код писал с приложения на телефон, так что код не тестированный 😅
namespace Test
{
// Классы из библиотеки
public sealed class Class1 { public void Method() { System.Console.WriteLine("Method1");} }
public sealed class Class2 { public void Method() { System.Console.WriteLine("Method2");} }
public sealed class Class3 { public void Method() { System.Console.WriteLine("Method3");} }
// Классы из библиотеки
public interface ILibraryClassesProvider { }
public class LibraryClassesProvider : ILibraryClassesProvider where T: class, new()
{
public T LibraryClass { get; }
public LibraryClassesProvider() => LibraryClass = new T();
}
internal class Program
{
internal static void Main()
{
ILibraryClassesProvider[] lcps =
{
new LibraryClassesProvider(),
new LibraryClassesProvider(),
new LibraryClassesProvider()
};
foreach (var lcp in lcps)
{
if ((lcp as LibraryClassesProvider) is { } class1)
class1.LibraryClass.Method();
else if ((lcp as LibraryClassesProvider) is { } class2)
class2.LibraryClass.Method();
else if ((lcp as LibraryClassesProvider) is { } class3)
class3.LibraryClass.Method();
else throw new NullReferenceException("В конструктор был передан null");
}
}
}
}
Добрый день. Это интерфейсный полиморфизм. Ad hoc связан с изменением параметров функций