2012-04-19 39 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]); 
     } 
     ... 
    } 

TypeB,TypeC與TypeA有相似的功能Copy/IsEqual/IsSame。 TypeBollection,TypeCollection有類似的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'有什麼區別? – 2012-04-19 15:46:13

+0

你應該繼承'Collection ',而不是'List '。 – SLaks 2012-04-19 15:46:58

+0

IsEqual檢查密鑰是否相等,IsSame檢查內容是否相同 – weslleywang 2012-04-19 17:57:14

回答

1

您應該用overrides替換new,然後創建一個LocDataCollection<T> : Collection<T> where T : LocData

+0

1.我改變new覆蓋,然後我得到錯誤消息:'TypeA.Copy()':返回類型必須是'LocData'以匹配重寫的成員'LocData.Copy ()' – weslleywang 2012-04-19 17:51:43

+0

2. TypeACollection怎麼樣? – weslleywang 2012-04-19 17:52:21

+0

3.哪裏可以找到更多關於? – weslleywang 2012-04-19 17:52:32

相關問題