2013-09-25 27 views
0

enter image description hereC#中的新重載真的有效嗎?

該示例顯示了我的方案。我有一個BaseClass與一些不錯的功能,這是派生類使用SpecialClass。但BaseClass有一個類型BaseClassSpecialClass需要類型特殊類因爲我不想投 - 更好的安全投 - 父母每次使用它。爲了解決這種情況,我使用關鍵字新的來創建此屬性的重載。這同樣適用於BaseConnection和其他一些屬性。

不幸我討厭這個關鍵字,在我看來它代表的總是缺乏一個好的設計。但在這種情況下,我顯然不知道如何更好地解決這個問題。有人有想法嗎?

問候,Yggdrasil的

+3

我不知道我完全理解你的要求,但你可以考慮製作'BaseClass'通用 - 這將意味着你不必強制調用者明確施放。 – CodingIntrigue

+0

@Rraham,好主意 - 希望父母總是和派生類一樣。 –

+0

@Rraham,我已經更新了這個例子。家長不是唯一的財產,我不喜歡這個想法有一個所有這些屬性的通用參數。另外,如果我在這裏使用泛型,我也使用BaseClass,這將比BaseClass 。 – Yggdrasil

回答

-1

爲什麼不使用類似的東西(例如):

public class Base 
{ 

    public virtual Base Parent { get {return ...}} 

    public virtual BaseConnection Connection { get {return ... ;}} 
} 

public class Special : Base 
{ 

    public override Base Parent { get {return MySpecialParent;}} 

    public override BaseConnection Connection { get {return new SpecialConnection();}} 
} 

,甚至類似的東西(如果有BaseConnection和SpecialConnection之間無親屬關係):

public class Base 
{ 

    public virtual dynamic Parent { get {return ...}} 

    public virtual dynamic Connection { get {return ... ;}} 
} 

public class Special : Base 
{ 

    public override dynamic Parent { get {return MySpecialParent;}} 

    public override dynamic Connection { get {return new SpecialConnection();}} 
} 

但是,也許你應該對你的類分離給予另一種想法,也許你應該從它的創建者或者使用者注入到基類的特定關係某種類型的容器,而不是接口。只是一個想法... :)

+0

第一個不是一個選項,因爲他說他在訪問派生類的父項時需要訪問派生類的功能。 '動態'在這裏是非常糟糕的設計,因爲它完全關閉了類型安全,當這不合適時。 – Servy

+0

的確,第一個選項不起作用,因爲我需要再次投射,而另一個選項在我看來與新選項一樣髒,儘管我從未使用它。 – Yggdrasil

相關問題