2017-10-19 134 views
1

我想,以防止有人用模擬的方式進行交互,他不應該。唯一允許的方法是實現接口「IInteraction」的方法並將此交互添加到列表中。 SimulationController然後遍歷該列表並在適當的時間執行該方法。 因此,與模擬相關的每個類只能通過IInteraction訪問(無論IInteraction在哪裏實現)。C#中的瓶頸進入模擬

我試圖使模擬類內部,因爲這會對其進行訪問限制任何人。但交互需要參考模擬才能操縱它。對它的引用只能在模擬程序集的內部進行,這使得此方法無用,因爲這樣IInterface的實現不能在公共範圍內實現。

+0

您是否在尋找建築學答案?你需要做什麼來實現像系統這樣的插件? – Icepickle

+0

@dasblinkenlight IInteraction不應被隱藏。如果你正在引用最後一句話:我試圖用內部的,沒有真實的,IInteraction的實現也必須在模擬中,正如你所說的那樣毫無意義。 – Butterkekskrumel

+0

@Butterkekskrumel我想你應該解釋一下什麼是錯有'IInteraction'公開,因爲對我來說,它看起來像你擁有這一切正確想通了。順便說一下,您可以將內部結構暴露給選定的外部DLL列表。查找「內部可見的屬性」。 – dasblinkenlight

回答

1

IInteraction應該是公開的。但Simulation是內部的,IInteraction的實現無法訪問它。

這個技巧是發佈一個接口ISimulation,讓程序到它的接口。一個internal實施ISimulation將保持從IInteraction實現隱藏。

public interface ISimulation { 
    void SetSomethingUp(); 
    void DoSomething(); 
} 
public interface IInteraction { 
    void Process(ISimulator simulator); 
} 
... 
internal class Simulator : ISimulator { 
    public void SetSomethingUp() { 
     ... 
    } 
    public void DoSomething() { 
     ... 
    } 
}