我需要限制從特定方法調用方法。通過方法限制呼叫
例如:
我已經喜歡GetData()
的功能,我需要調用它的方法的簽名是無效 SomeFUnction(string a, String b)
否則GetData
呼叫不應在編譯時間本身是允許的。
我需要限制從特定方法調用方法。通過方法限制呼叫
例如:
我已經喜歡GetData()
的功能,我需要調用它的方法的簽名是無效 SomeFUnction(string a, String b)
否則GetData
呼叫不應在編譯時間本身是允許的。
不,你不能在編譯時做它。
事實上,他*可以*在運行時執行它。在編譯時他無法做到(沒有外部工具)。 – 2011-03-06 07:13:39
是的,對不起,我錯誤地輸入了。當然,我的意思是**編譯**時間。 – 2011-03-06 07:14:06
所以我可以像調用類一樣限制應該實現一個特定的接口。編譯時我也需要這個。我是否可以通過對應該調用的方法使用任何約束來實現這一點? – Eldhose 2011-03-06 07:23:17
如果您只想限制可以從「SomeFuncion(...)」調用「GetData」,那麼您可以通過將您的方法封裝在類中(實例/靜態)並將「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規則。 – Gabe 2011-03-06 07:07:12
我不認爲你真的需要這個功能。是否有一個特殊的用例需要這個?這聽起來像一個可怕的想法,沒有明確的使用。 – 2011-03-06 07:59:18