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

КОМЕНТАРІ • 4

  • @janetgaidukova3612
    @janetgaidukova3612 6 років тому +2

    Круто!

  • @LinDahai88
    @LinDahai88 7 років тому +2

    Интересная вещь... но ИМХО если задуматься этот паттерн называется адаптер.. особенно если рассматривать кейс со сторонней dll-кой. А на счет запечатанного класса и динамического массива, тем более лучше сделать класс-обертку а дальше через интерфейс...

  • @vorontsovru270895
    @vorontsovru270895 3 роки тому

    В случае когда классы в либе закрыты от наследования, но содержат публичный конструктор, я бы сделал обобщенный класс, с композицией в публичном конструкторе без параметров, но ни в ком случае не стал бы использовать 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");
    }

    }
    }
    }

  • @DInfinity3
    @DInfinity3 5 років тому

    Добрый день. Это интерфейсный полиморфизм. Ad hoc связан с изменением параметров функций