我寫一個「系統」使用外部庫,我的代碼相結合。我想問一下,是否有可能將類的屬性暴露給應用程序的一部分並隱藏給其他人?是否有接口,抽象類,可以做到這一點的繼承的組合?如何類的財產暴露於一類,並隱藏到另一個?
爲什麼: 我使用外部庫的對象,例如在我的類屬性。我不想從類的任何實例訪問該屬性,只能從「裝飾者」類中進行訪問。我可能是錯的,這可能是OOP的違規行爲,它不可能完成,我不知道。
我已經試過如下: 讓ExternalEngine「是對象我想隱藏:
public class Engine : EngineBase, IEngine
{
public string OtherProperty {get;set;}
}
public abstract class EngineBase
{
protected ExternalEngine External {get;set;}
}
public interface IEngine
{
public string OtherProperty {get;set;}
}
public abstract class A : Engine
{
protected Engine engine;
protected A(Engine engine)
{
this.engine = engine;
}
}
public class B : A
{
public B(Engine engine) : base(engine)
{
}
public void SampleOperation()
{
// operation on 'engine' field
}
}
而且我在它試圖接口,抽象類和訪問修飾符的多種組合,但沒有提供什麼我需要。
在我的小例子,我想只有從B類的方法來修改類引擎的對象ExternalEngine(但通過繼承的這個組合還有的不能訪問該財產;))
請指引我解決 在這個項目中,而不是在其他項目(項目說A);感謝
'ExternalEngine'是一個類型,而不是一個對象,它遠不定義 – Adrian
現在引擎對象和所有其類型在Builder類中創建 –
您可以使用依賴注入。在代碼中引用接口,這樣只有相應的接口才能「瞭解」該字段。儘管它們仍然可以由同一個具體類來實現。 – maccettura