2016-12-24 11 views
-2

Во время подготовки к «Программирование в C#» Сертификация из this книги в объективном 2.1, где следующий код показан для общих типов:Обобщения в .NET 2.0: Использование в Where класс по определению класса

class MyClass<T> where T : class, new() 
{ 
    public MyClass() 
    { 
     MyProperty = new T(); 
    } 

    T MyProperty { get; set; } 
} 

Я знаю, какой общий тип и зачем он нам нужен, но может ли кто-нибудь объяснить этот запутанный код и как мы можем использовать его с любым примером.

ответ

1

Я думаю, вы не понимаете эту часть:

where T:class,new() 

Это говорит о том, что T должен быть ссылочного типа (то есть класс), и он должен иметь конструктор по умолчанию (конструктор без аргументов). Это означает, что T не может быть int, потому что это структура. Он также не может быть StreamReader, потому что у него нет конструктора по умолчанию.

Почему это полезно?

Некоторые вещи могут использоваться только с ссылочными типами, но не с типами значений, например. as. И потому, что вы сказали, T должен иметь конструктор по умолчанию, вы можете сделать это:

public MyClass() 
{ 
    MyProperty = new T(); 
} 
T MyProperty { get; set; } 

Поскольку T должен иметь конструктор по умолчанию, вы можете позвонить new T().

+0

Да это первая часть, которая запутать меня (то есть, где T: класс, новый()) Теперь в соответствии с вашим объяснением предположим, что мы имеем класс Person, как показано ниже класса Person { Person() { this.PersonName = «Джек»; } общедоступная строка PersonName {get; set; } } Как мы можем использовать этот общий MyClass с этим. –

+1

Поскольку 'Person' является ссылочным типом (классом) и имеет конструктор по умолчанию. Его можно использовать в качестве типичного параметра типа для MyClass. Вы можете инициализировать его экземпляр следующим образом: 'var obj = new MyClass ()'. Теперь 'obj.MyProperty' хранит человека с именем« Джек ». @UsmanHayatKhan – Sweeper

+0

Вы должны включить это в свой ответ, потому что это, вероятно, часть, которую OP не понимает. –