Типичный пример непонимания:
ME:
ты как к идее static virtual относишься?
Comrade
бред, конечно
ME:
от чего же бред?
Comrade
потому что полиморфизм работает с экземплярами дочерних объектов так же, как работал с родительскими. а статические методы вообще к экземплярам объектов не относятся, им объект -- чисто пространство имён
Comrade
поэтому я что-то хз как сделать дочерний объект, привести его к интерфейсу родителя и вызвать статический метод
Comrade
это хрень какая-то
Раньше я писал на Delphi, и к этой фиче языка.
Вот здесь мне бы это пригодилось:
public bool SelectAll(Type p_EntityType, List<CEntity> p_ResultList)
{
if (p_ResultList == null)
{
throw new ArgumentNullException("p_ResultList");
}
DbDataReader reader = DA.Select(p_EntityType, null);
bool Result = reader.Read();
if (Result)
{
int i = p_ResultList.Count;
do
{
CKey key = p_EntityType.RetriveKey(reader); //вот в этом месте я очень хочу static virtual
...
}
while (reader.Read());
}
return Result;
}
Интересно, как бы вы могли предложить для этого примера? Т.е. есть задача — в соответствии с переданным типом выполнить функцию.
Здравствуйте, Фанатик, Вы писали:
Ф>Ф> CKey key = p_EntityType.RetriveKey(reader); //вот в этом месте я очень хочу static virtual
Ф>
Нечто похожее на static virtual можно сделать с помощью type family в Haskell.
В C# в принципе я мог бы представить себе такую фичу: static interface, который можно указывать в качестве constraint у типа-параметра, и потом вызывать методы этого интерфейса у этого типа-параметра.
Голосование на RSDNАвтор: Don Reba
Дата: 30.04.08
Ф>Вот здесь мне бы это пригодилось:
Ф>
Ф> public bool SelectAll(Type p_EntityType, List<CEntity> p_ResultList)
Ф> {
Ф> if (p_ResultList == null)
Ф> {
Ф> throw new ArgumentNullException("p_ResultList");
Ф> }
Ф> DbDataReader reader = DA.Select(p_EntityType, null);
Ф> bool Result = reader.Read();
Ф> if (Result)
Ф> {
Ф> int i = p_ResultList.Count;
Ф> do
Ф> {
Ф> CKey key = p_EntityType.RetriveKey(reader); //вот в этом месте я очень хочу static virtual
Ф> ...
Ф> }
Ф> while (reader.Read());
Ф> }
Ф> return Result;
Ф> }
Ф>