Страницы

Поиск по вопросам

понедельник, 30 декабря 2019 г.

Обобщенные типы в С#

#c_sharp #generics #c_sharp_faq


public class Example
{
    public static void Main()
    {
        Myclass ob = new Myclass();
    }


    class Myclass where T: new()
    {
        public T instanse = new T();
    }
    class Testclass { }
} 


Вопрос: Myclass - это тип. Testclass - тоже тип. Какого же тогда типа экземпляр ob?
    


Ответы

Ответ 1



MyClass — это как бы не совсем тип. Это обобощённый тип (на английском — generic). Вы можете сконструировать экземпляр обобщённого типа только указав типы-аргументы, которые заменят формальный параметр-тип T. Экземпляр обобщённого типа самого по себе сконструировать невозможно. Для каждого обобщённого типа существует (обычно бесконечно много) конкретизаций: конкретных типов, которые соответствуют определённым значениям типов-параметров. Соответственно, тип ob и есть такая конкретизация: Myclass с параметром T = Testclass. Такая конкретизация в языке C# записывается как Myclass.

Ответ 2



Неточность заключается в том, что в приведенном коде нет типа/класса Myclass Есть Myclass - класс с generic-параметром. При создании указывается конкретный T: Myclass и переменная получает этот тип: Myclass

Комментариев нет:

Отправить комментарий