C#中的瓶颈进入模拟
问题描述:
我想,以防止有人用模拟的方式进行交互,他不应该。唯一允许的方法是实现接口“IInteraction”的方法并将此交互添加到列表中。 SimulationController然后遍历该列表并在适当的时间执行该方法。 因此,与模拟相关的每个类只能通过IInteraction访问(无论IInteraction在哪里实现)。C#中的瓶颈进入模拟
我试图使模拟类内部,因为这会对其进行访问限制任何人。但交互需要参考模拟才能操纵它。对它的引用只能在模拟程序集的内部进行,这使得此方法无用,因为这样IInterface的实现不能在公共范围内实现。
答
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() {
...
}
}
您是否在寻找建筑学答案?你需要做什么来实现像系统这样的插件? – Icepickle
@dasblinkenlight IInteraction不应被隐藏。如果你正在引用最后一句话:我试图用内部的,没有真实的,IInteraction的实现也必须在模拟中,正如你所说的那样毫无意义。 – Butterkekskrumel
@Butterkekskrumel我想你应该解释一下什么是错有'IInteraction'公开,因为对我来说,它看起来像你拥有这一切正确想通了。顺便说一下,您可以将内部结构暴露给选定的外部DLL列表。查找“内部可见的属性”。 – dasblinkenlight