2011-09-30 51 views
0

所以,我沒有噸,噸工作的努力使一個接口,用於一組通用的類。這個想法是讓每個類都可以在該集合中使用的接口,但最終每個類都是不同的。原來接口不喜歡共享成員。我試了一下:在處理接口時如何處理共享成員?

Public Interface ISomeInterface 
Shared Property Meta() as Object 
End Interface 


Public Class A 

Implements ISomeInterface 
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta 
'Set/get methods 
End Propery 

Public Function Haduken() as Object 
'perform Haduken 
End Function 
End Class 


Public Class B 

Implements ISomeInterface 
Shared Public Property Meta() as Object Implements ISomeInterFace.Meta 
'Set/get methods 
End Propery 

Public Function SonicBoom() as Object 
'perform sonic boom 
End Function 
End Class 

很顯然,如果我做了功課這一點,我就知​​道,共享成員不能在接口使用。我是否應該讓每個班級全權負責處理共享成員?有沒有其他方法可以將共享成員的耦合降至最低? Theres約20個左右的類將實現一個單一的接口。提前致謝。

回答

2

合作解決這個問題的最簡單的方法是有一個Private實現它只是轉發到Shared成員

Public Shared Property Meta As Object 
    ' Get/Set methods 
End Property 

Private Property MetaImpl() as Object Implements ISomeInterFace.Meta 
    Get 
    return Meta 
    End Get 
    Set 
    Meta = Value 
    End Set 
End Propery 

這種模式可以讓你保持相同的面向公衆的API,並且仍然實現接口的接口。

+0

將接口是什麼樣的? 公用接口ISomeInterface 私有財產MetaImpl()作爲對象 結束接口 –

+0

@hydroparadise接口並不需要在所有改變這種格局 – JaredPar

+0

這個問題是,你需要再實例化派生類訪問共享會員。 – Kurren

0

如果這個想法是,接口的每個實現應該使用自己的共享變量,JaredPar的做法是正確的。如果這個想法是界面的所有用戶應該看到相同的共享變量,不管他們有什麼實例(如果有的話),正確的方法是創建一類具有相似界面的名稱,並使用一個共享成員那個班。這是例如使用的方法。枚舉<牛逼> .Empty或的Comparer <牛逼> .DEFAULT。