Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > конструкция where


Автор: wwwdiz 15.6.2007, 01:34
Наткнулся на http://forum.vingrad.ru/sources/topic-154181/unread-1.html, понял практически всё за исключением ключевого слова where:
Код

 private TForm GetForm<TForm> ()
        where TForm: Form, new()

Очень хотелось бы услышать объяснения экспертов...

Автор: SpaceSpace 15.6.2007, 08:00
Этот конструкт накладывает ограничения на generic,

т.е. в процессе компиляции будет проверяться соответсвует ли тот тип, который ты засунеш
в
<>
Код

TForm 
(в твоем случае), т.е. является ли твой тип производным от TForm 
а также этот класс должен иметь конструктор без параметров 
Код

new()


и так, в конечном итоге для успешного выполнения тып должен иметь конструктор без параметров,
и быть производным от TForm

объяснил?

Автор: darkness 15.6.2007, 08:42
SpaceSpace, 
Цитата

и быть производным от TForm

Скорей всего от Form, т.к.: where TForm: Form, new()

Автор: wwwdiz 15.6.2007, 09:08
darkness, тогда а  что подобное гласит:
Код

private TForm GetForm<TForm, TKey> (TKey key)
        where TForm : Form, IViewer<TKey>, new()


Что TForm, который в скобках <>, должен быть производным от Form  и интерфейса IViewer, да и ещё с конструтором без параметров? (задаю подобные ламерские вопросы, потому как в литературе нигде объяснения подобного не встречал)

Автор: SpaceSpace 15.6.2007, 09:27
Цитата

Скорей всего от Form

описка, ссори

Добавлено через 3 минуты и 36 секунд
а если несколько типизированных параметров, то надо писать так

Код

        private TForm GetForm<TForm, TKey>(TKey key)
        where TForm : Form, new()
          where  TKey: new()

Автор: tol05 15.6.2007, 09:32
первое ограничение: тип TForm (т.е любой подставляемый тип) должен быть совместимым с Form, т.е. быть им, или его потомком
второе ограничение: TForm должен быть типом, имеющим конструктор без параметров

И вообще, всем, кто интересуется вопросами синтаксиса, советую почитать http://www.ecma-international.org/publications/standards/Ecma-334.htm

Автор: SpaceSpace 15.6.2007, 09:33
Цитата

Что TForm, который в скобках <>, должен быть производным от Form  и интерфейса IViewer, да и ещё с конструтором без параметров? 

правильно мыслишь, молодец

Автор: wwwdiz 15.6.2007, 09:35
Всё, Ребята, разъяснили!!!! Спасибо!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)