C# 限制对方法的调用
我需要限制从特定方法调用方法 例如: 我有一个类似于C# 限制对方法的调用,c#,.net,C#,.net,我需要限制从特定方法调用方法 例如: 我有一个类似于GetData()的函数,我需要它的调用方法的签名 voidSomeFUnction(字符串a、字符串b) 否则,编译时本身不允许调用GetData。不,您不能在编译时这样做。如果您只想限制“GetData”可以从“somefunction(…)”调用,那么您可以通过将方法封装在类(实例/静态)中并使“GetData”方法私有,并且仅从“SomeFunction(…)”调用它。否则,在编译时如何限制它 尽管如此,我相信你并没有在这里分享确切的问
GetData()
的函数,我需要它的调用方法的签名
voidSomeFUnction(字符串a、字符串b)
否则,编译时本身不允许调用
GetData
。不,您不能在编译时这样做。如果您只想限制“GetData”可以从“somefunction(…)”调用,那么您可以通过将方法封装在类(实例/静态)中并使“GetData”方法私有,并且仅从“SomeFunction(…)”调用它。否则,在编译时如何限制它
尽管如此,我相信你并没有在这里分享确切的问题陈述。
相反,你正在分享一个你认为是解决问题的可能方法的想法
分享准确的问题陈述将为您带来更好的答案。这不会造成编译时中断。但是,如果测试覆盖率命中了GetData()的所有调用,那么这将通过中断测试来完成您想要的任务
public void GetData()
{
// last method up the stack trace
var callingMethod = new StackTrace().GetFrame(1).GetMethod();
var returnType = callingMethod.ReturnType;
// throw exception if not okay
var callingMethodParameters = callingMethod.GetParameters();
// throw exception if not okay
// GetData implementation
}
也许你可以为类似的东西编写一个FxCop规则。我认为你真的不需要这个功能。是否有特定的用例要求这样做?如果没有明确的用途,这听起来是个糟糕的主意。事实上,他可以在运行时完成。他不能在编译时做这件事(没有外部工具)。是的,对不起,我只是打错了。当然,我指的是编译时,所以我可以限制调用类应该实现特定接口。我在编译时也需要这个。我可以通过对应该调用的方法使用任何约束来实现这一点吗?@Eldhose:要在编译时实现这一点,需要更改此代码的设计。如果您有更改设计的自由,那么您可以实现“访问者”模式,并在“调用者”上强制使用特定接口。是的,我可以更改设计。我这样做是为了自学。请告诉我访客模式。谢谢。。。