2011-08-08 27 views
2

我找不到我在找的東西,並且對於C#的許多功能來說都是新的。基本上我有一個有很多方法的類,其中很多都與類似的操作有關。我正在編寫一種API,並希望最終用戶能夠通過按目的進行分組來訪問這些方法。將一個類組合在一起的方法

所以我的類有許多成員都訪問相同的數據,讓我們稱之爲ParentClass,並且我想調用ParentClass.ZoomFunctions.ZoomIn()在父類中放大訪問數據(並且最好是成員)

對於如何使用繼承我沒有一個好主意,但我找不到如何簡單地做到這一點。

+0

本質(含警告):「是」等於繼承。 '有'等於組成。首先閱讀http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) –

回答

1

這聽起來像你應該創建一個接口,將你的方法組合在一起,然後創建一個接口作爲其類型的公共屬性。

例如:

interface IZoomFunctions 
{ 
    public void ZoomIn(); 
    ... 
} 

class ParentClass : IZoomFunctions 
{ 
    public IZoomFunctions ZoomFunctions { get; } 
} 
3

嗯......

沒有更多的瞭解你的代碼,這聽起來像您的班級正在試圖做太多。也許你應該考慮把你的API分成多個類,而不是試圖在一個類中分組方法。

考慮閱讀有關Single Responsibility PrincipleSeparation of Concerns的信息,以瞭解您的課堂設計如何改進。

+0

嗯,它確實沒有那麼多,我只是想提高可讀性和易用性,以便將類似的功能組合在一起。接口可能是要走的路。 –

+0

這不是關於它在做多少,而是它所做的所有事情是否真的屬於一起。 –

+0

@EstebanAraya不幸的是這個話題很難在帖子中解釋。你將需要一本書。我會推薦閱讀Robert C Martin的Clean Code。他深入地闡述了這些概念 –

0

如果你想確保你的用戶只能通過你定義的路徑訪問函數(即他們必須調用ParentClass.ZoomFunctions.ZoomIn(),並且不應該被允許直接調用ParentClass.ZoomIn()),如果你想在一個類一起保存所有內容,而無需創建不同的類,您可以:

爲每個廣告的方法組的界面,就像JOHND建議:

public interface IZoomFunctions 
{ 
    public void ZoomIn(); 
    //... 
} 

向你的父類添加一個屬性,該屬性返回類本身投射到你的接口:

public IZoomFunctions ZoomFunctions 
{ 
    get { return this as IZoomFunctions; } 
} 

然後讓你的類明確實現的接口,使原始方法私有(避免直接訪問):

class ParentClass : IZoomFunctions 
{ 
    // your stuff 

    public IZoomFunctions ZoomFunctions 
    { 
     get { return this as IZoomFunctions; } 
    } 

    private void ZoomIn() 
    { 
     // your real code here 
    } 

    public void IZoomFunctions.ZoomIn() 
    { 
     this.ZoomIn(); 
    } 
}