#c_sharp #generics #c_sharp_faq
public class Example { public static void Main() { Myclassob = 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
Комментариев нет:
Отправить комментарий