Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制对方法的调用_C#_.net - Fatal编程技术网

C# 限制对方法的调用

C# 限制对方法的调用,c#,.net,C#,.net,我需要限制从特定方法调用方法 例如: 我有一个类似于GetData()的函数,我需要它的调用方法的签名 voidSomeFUnction(字符串a、字符串b) 否则,编译时本身不允许调用GetData。不,您不能在编译时这样做。如果您只想限制“GetData”可以从“somefunction(…)”调用,那么您可以通过将方法封装在类(实例/静态)中并使“GetData”方法私有,并且仅从“SomeFunction(…)”调用它。否则,在编译时如何限制它 尽管如此,我相信你并没有在这里分享确切的问

我需要限制从特定方法调用方法

例如:

我有一个类似于
GetData()
的函数,我需要它的调用方法的签名 void
SomeFUnction(字符串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:要在编译时实现这一点,需要更改此代码的设计。如果您有更改设计的自由,那么您可以实现“访问者”模式,并在“调用者”上强制使用特定接口。是的,我可以更改设计。我这样做是为了自学。请告诉我访客模式。谢谢。。。