【发布时间】:2016-08-09 19:39:11
【问题描述】:
我想根据传入的类型限制对方法的访问。在我的特殊情况下,如果您愿意,我正在开发一个 UDP“管理器”。
我希望我的UDPManager 用于不同的事情。例如,我可能有 1 个UDPManager 用于客户端和服务器之间的通信,另一个UDPManager 用于处理服务器和另一个服务器之间的通信。
我定义了一个enum,它指定了UDPManager 的类型。例如,ManagerType.A = 1 和...
ManagerType.B = 2
UDPManager 具有可以订阅的某些事件,如果这些事件不相关,我不希望它们可用,因为 UDPManager 的类型。
这是一个类的例子
public class Something
{
public int SomethingsType { get; set; }
public void A() { }
public void B() { }
}
如果SomethingsType == MessageType.A,然后MessageType.B 不可用(即它是私有的),我怎样才能做到这一点?
为了更清楚,如果我输入:
Something something = new Something();
someting.SomethingsType = 1
我不希望something.B() 可用。
更新
我很抱歉提到runtime。我的意思是,如果说SomethingsType 是A,我不想说方法(B)可用。
【问题讨论】:
-
不可能。即使它是私有的,您也可以随时使用反射调用方法。
-
实现
SomethingA、SomethingB等。然后使用给定ManagerType的工厂方法。 -
不就是继承存在的原因吗?经理是父母,经理A,经理B是孩子吗?
-
没有。如果您想对自己造成恶作剧,只需拿起一把锤子并用它敲打自己的头部即可。它更快,并且保证可以工作。
-
听起来像教科书XY problem。您需要重新考虑 API 的基本结构。
标签: c# access-modifiers