2011-03-06 92 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 
}