C# 区分方法的两个入口点

C# 区分方法的两个入口点,c#,events,C#,Events,有三个接口:IServer、IComponent、IClient。它们之间的连接是通过事件完成的。我编写服务器、组件、客户机类,分别实现它们 组件之间可能存在依赖关系。也就是说,如果组件y依赖于x,那么当调用x.Start()时,将调用所有子体Start()。依赖项由IComponent中的AddDependency()方法创建。(请参阅下面的源代码链接) 客户端无法直接看到组件,也无法使用事件通过服务器与组件交互。只有在服务器上注册了所有组件和客户端之后,才能执行此操作 问题: 方法Start

有三个接口:
IServer、IComponent、IClient。
它们之间的连接是通过事件完成的。我编写
服务器、组件、客户机
类,分别实现它们

组件之间可能存在依赖关系。也就是说,如果组件y依赖于x,那么当调用
x.Start()
时,将调用所有子体
Start()
。依赖项由
IComponent
中的
AddDependency()
方法创建。(请参阅下面的源代码链接)

客户端无法直接看到组件,也无法使用事件通过服务器与组件交互。只有在服务器上注册了所有组件和客户端之后,才能执行此操作

问题: 方法
Start()
有两个入口点: 1:
Start()
Server
事件处理程序(第一个组件)中调用 2:
Start()
Component
事件处理程序中调用(子代已启动)

对于1:如果组件的状态已经
运行
-抛出
非法操作异常
对于2:如果子体已在运行
,则不执行任何操作

如何区分1和2

限制: -修改接口-禁止 -向下投射-禁止

我看到的一个解决方案是put static标志,它在调用第一个组件的
Start()
后立即下降。然而,这种方法破坏了封装,因为每次在某些“外部”方法中(例如,在服务器的处理程序中)都应该重新初始化标志,所以外部方法必须看到比接口中指定的内容更多的内容。此外,这隐含地意味着Start()仅由服务器调用,这在问题中是不保证的

还有什么想法吗

资料来源:


提前谢谢。

据我所知,您的问题归结为“我有一个界面,它只有一个启动方法,我如何在不添加任何其他内容的情况下判断它是否已经启动”

我突然想到你不能。您可以做的是始终抛出
IllegalOperationException
,无论它如何调用。然后在组件中捕获
非法操作异常
并传递(不执行任何操作)。在您的服务器方法中,您让它冒泡到更相关的位置

就我所知,这是你唯一的选择

注意:我没有查看任何代码,因为我不想从不可信的来源下载包含9个文件的zip文件(对您个人没有冒犯)