Re: Как ограничить тип параметра
От: FLUID Украина http://yuriy-okhmat.blogspot.com/
Дата: 20.06.06 06:41
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>В метод, создающий экземпляр класса передаётся переменная типа Type, Вот сигнатура

А>
А> public MyObject CreateObject(Type t)
А> {
   
А> }
А>


А>Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?


наверное, как-то так if(t.BaseType == typeof(MyObject)) ....
Мы не владеем тем, чего мы не понимаем....
Re: Как ограничить тип параметра
От: stump http://stump-workshop.blogspot.com/
Дата: 20.06.06 07:26
Оценка: -1
Здравствуйте, Аноним, Вы писали:


А>Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?


public MyObject CreateObject(Type t)
{
   if(!t.IsSubclassOf(typeof(MyObject)) && !i.Equals(typeof(MyObject))
      throw new ArgumentException("Bad type"); 
   
}
Понедельник начинается в субботу
Как ограничить тип параметра
От: Аноним  
Дата: 20.06.06 06:38
Оценка:
В метод, создающий экземпляр класса передаётся переменная типа Type, Вот сигнатура
 public MyObject CreateObject(Type t)
 {
   
 }


Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?
Re: Как ограничить тип параметра
От: Mab Россия http://shade.msu.ru/~mab
Дата: 20.06.06 06:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В метод, создающий экземпляр класса передаётся переменная типа Type, Вот сигнатура

А>
А> public MyObject CreateObject(Type t)
А> {
   
А> }
А>


При такой сигнатуре это возможно только во время выполнения.
Re[2]: Как ограничить тип параметра
От: Аноним  
Дата: 20.06.06 06:44
Оценка:
А>>
А>> public MyObject CreateObject(Type t)
А>> {
   
А>> }
А>>


Mab>При такой сигнатуре это возможно только во время выполнения.

А как изменить сигнатуру, чтобы во время компиляции отслеживалось?
Re[3]: Как ограничить тип параметра
От: Mab Россия http://shade.msu.ru/~mab
Дата: 20.06.06 06:47
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А как изменить сигнатуру, чтобы во время компиляции отслеживалось?

T CreateObject<T>() where T : BaseClass

Ну и еще скорее всего придется повесить констрейнт new(), исходя из названия
Re[2]: Как ограничить тип параметра
От: V.Petrovski Беларусь  
Дата: 20.06.06 07:09
Оценка:
Здравствуйте, FLUID, Вы писали:

FLU>наверное, как-то так if(t.BaseType == typeof(MyObject)) ....

Нет, но если идти дальше этим путем, то надо так:
if(t.IsAssignableFrom(typeof(MyObject)))


<<RSDN@Home 1.2.0.alpha 0>>
Nemerle
.NET Localizer
Re[3]: Как ограничить тип параметра
От: V.Petrovski Беларусь  
Дата: 20.06.06 07:11
Оценка:
Здравствуйте, V.Petrovski, Вы писали:

VP>
VP>if(typeof(MyObject).IsAssignableFrom(t))
VP>

Перепутал Надо поменять местами


<<RSDN@Home 1.2.0.alpha 0>>
Nemerle
.NET Localizer
Re: Как ограничить тип параметра
От: vensub Украина  
Дата: 20.06.06 07:15
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В метод, создающий экземпляр класса передаётся переменная типа Type, Вот сигнатура

А>
А> public MyObject CreateObject(Type t)
А> {
   
А> }
А>


А>Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?


использовать Generic types
Re: Как ограничить тип параметра
От: Igor Trofimov  
Дата: 20.06.06 08:06
Оценка:
А>Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?

Никак. Только в рантайме.
Re[2]: Как ограничить тип параметра
От: Максим Зелинский  
Дата: 20.06.06 09:31
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

А>>Я хочу чтобы передавался Type, полученный только для тех классов, которые производны от MyObject. Можно ли сделать такое? В Дельфи есть конструкции class of... А в C# 2.0 как?


iT>Никак. Только в рантайме.


Уже писали, что через generic
Re[3]: Как ограничить тип параметра
От: Igor Trofimov  
Дата: 20.06.06 13:29
Оценка:
iT>>Никак. Только в рантайме.

МЗ>Уже писали, что через generic


Это не равнозначная замена. Как будешь вызывать этот generic-метод с значением параметра, известным только в runtime?
Re[4]: Как ограничить тип параметра
От: Максим Зелинский  
Дата: 20.06.06 13:57
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>>>Никак. Только в рантайме.


МЗ>>Уже писали, что через generic


iT>Это не равнозначная замена. Как будешь вызывать этот generic-метод с значением параметра, известным только в runtime?

Мда

А как изменить сигнатуру, чтобы во время компиляции отслеживалось?

Re[5]: Как ограничить тип параметра
От: Igor Trofimov  
Дата: 20.06.06 16:55
Оценка:
iT>>Это не равнозначная замена. Как будешь вызывать этот generic-метод с значением параметра, известным только в runtime?
МЗ>Мда
МЗ>

А как изменить сигнатуру, чтобы во время компиляции отслеживалось?


Это понятно. Но из того, что человек не написал, что он будет передавать в этот метод параметры в рантайме, еще не следует, что он этого делать не будет

Как ни крути, но generic-вариант разруливает одно, ограничивая другое. Ergo, это не равноценная замена.
Re[6]: Как ограничить тип параметра
От: TK Лес кывт.рф
Дата: 20.06.06 17:39
Оценка:
Здравствуйте, Igor Trofimov, Вы писали:

iT>Это понятно. Но из того, что человек не написал, что он будет передавать в этот метод параметры в рантайме, еще не следует, что он этого делать не будет



iT>Как ни крути, но generic-вариант разруливает одно, ограничивая другое. Ergo, это не равноценная замена.


но это еще не значит, что сделать этого нельзя.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Как ограничить тип параметра
От: Аноним  
Дата: 20.06.06 20:01
Оценка:
public MyObject CreateObject(MyObject t)
{
}


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[7]: Как ограничить тип параметра
От: Igor Trofimov  
Дата: 21.06.06 10:56
Оценка:
TK>но это еще не значит, что сделать этого нельзя.

Как?
Re[8]: Как ограничить тип параметра
От: TK Лес кывт.рф
Дата: 21.06.06 14:08
Оценка:
Hello, "Igor Trofimov"
> TK>но это еще не значит, что сделать этого нельзя.
>
> Как?

Через MakeGenericMethod например.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.