2012-04-19 2 views
0
class TypeA 
    { 
     public TypeA Copy() { ... } 
     public bool IsEqual(TypeA mytypeA) { ... } 
     public bool IsSame(TypeA mytypeA) { ... } 
     ... 
    } 

    class TypeACollection : List<TypeA> 
    { 
     public bool IsSame (TypeACollection typeAs) 
     { 
      if (Count != typeAs.Count) 
       return false; 
      return this[0].IsSame(typeAs[0]); 
     } 
     ... 
    } 

ТипB, TypeC имеют аналогичные функции Copy/IsEqual/IsSame как TypeA. ТипBCollection, TypeACollection имеют аналогичный IsSame. Исключением является TypeBCollection, использующий TypeB.IsSame, TypeCCollection использует TypeC.IsSame.общий? абстрактный класс? что лучше всего разработать мой код?

сейчас, я планирую добавить 2 новых классов: LocData и LocDataCollection

class LocData 
{ 
    public virtual TypeA Copy() { ... } 
    public virtual bool IsEqual(TypeA mytypeA) { ... } 
    public virtual bool IsSame(TypeA mytypeA) { ... } 
    ... 
} 

class LocDataCollection<T> : List<LocData> where T: LocData 
{ 
    public bool IsSame (LocDataCollection<T> typeAs) 
    { 
     if (Count != typeAs.Count) 
     return false; 
     return this[0].IsSame(typeAs[0]); 
    } 
    ... 
} 

и переписать существующий код,

class TypeA : LocData 
{ 
    public new TypeA Copy() { ... } 
    public new bool IsEqual(TypeA mytypeA) { ... } 
    public new bool IsSame(TypeA mytypeA) { ... } 
    ... 
} 

class TypeACollection : ??? 
{ 
    ??? 
    // so I can remove IsSame here, 
    // when I call IsSame, it will use one from LocDataCollection and still call 
    // TypeA.IsSame 
    ... 
} 

теперь я потерял в абстрактных/виртуальных/общий/.. ., что является лучшим способом?

+0

В чем разница между 'IsEqual' и' IsSame'? –

+0

Вы должны наследовать 'Collection ', а не 'List '. – SLaks

+0

IsEqual проверить, если ключ равен, IsSame проверить, если содержимое такое же – weslleywang

ответ

1

Вы должны заменить new на overrides, а затем создать LocDataCollection<T> : Collection<T> where T : LocData.

+0

1. Я изменяю new для переопределения, затем я получил сообщение об ошибке: 'TypeA.Copy()': возвращаемый тип должен быть 'LocData' для соответствия переопределенному члену 'LocData.Copy() ' – weslleywang

+0

2. как насчет TypeACollection? – weslleywang

+0

3. Где я могу найти дополнительную информацию? – weslleywang

Смежные вопросы