2011-03-06 122 views
1

我需要限制从特定方法调用方法。通过方法限制呼叫

例如:

我已经喜欢GetData()的功能,我需要调用它的方法的签名是无效 SomeFUnction(string a, String b) 否则GetData呼叫不应在编译时间本身是允许的。

+4

也许你可以写这样的FxCop规则。 – Gabe 2011-03-06 07:07:12

+1

我不认为你真的需要这个功能。是否有一个特殊的用例需要这个?这听起来像一个可怕的想法,没有明确的使用。 – 2011-03-06 07:59:18

回答

1

不,你不能在编译时做它。

+1

事实上,他*可以*在运行时执行它。在编译时他无法做到(没有外部工具)。 – 2011-03-06 07:13:39

+0

是的,对不起,我错误地输入了。当然,我的意思是**编译**时间。 – 2011-03-06 07:14:06

+0

所以我可以像调用类一样限制应该实现一个特定的接口。编译时我也需要这个。我是否可以通过对应该调用的方法使用任何约束来实现这一点? – Eldhose 2011-03-06 07:23:17

1

如果您只想限制可以从“SomeFuncion(...)”调用“GetData”,那么您可以通过将您的方法封装在类中(实例/静态)并将“GetData “私有方法,只能从你的”SomeFunction(...)“中调用它。你还可以在编译时限制这个限制!!

虽然,我相信你没有在这里分享确切的问题陈述。 相反,您正在分享一个想法,认为您可以解决您的问题!!

分享确切的问题陈述会给你更好的答案。

0

这不会创建编译时间中断。但是,如果测试覆盖范围触及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 
}