我想知道是否可以通過字符串調用動態c#對象上的函數。我想要做這樣的事情:我可以使用字符串方法名稱調用c#動態方法嗎?
string lMethodName = "MethodName";
dynamic lDynamicObject = GetDynamicObject();
lDynamicObject.Invoke(lMethodName, lParameters);
任何想法或解決方案將不勝感激。
也許像Servy說的那樣,有一種更好的方法可以通過不同的設計來實現我們想要的。我們正在使用SignalR並擁有一個儀表板網絡應用程序。我們希望儀表板內的每個小部件都能夠將數據推送到它。爲了實現這一點,我們將使用剃鬚刀代碼將widget ID注入到每個單獨的小部件SignalR clientside代理中。每個部件將具有以下內容:
hub.client.updateWidget123456 = aUpdateFunction;
其中123456是小部件的ID。在服務器端SignalR基地代碼,我們可以回調到客戶方javascript函數:
int lWidgetId = 123456;
dynamic lDynamic = Clients.All;
lDynamic.Invoke("updateWidget" + lWidgetId, lParameters);
還有其他的方法我能想到的實現這一點沒有創建JavaScript代理方法。我認爲這很好,因爲服務器與每個單獨的小部件有直接的通信線路。哪些可以從多個儀表板/瀏覽器訪問,但它們都將通過上面的單個調用進行更新。
我們可以通過調用javascript客戶端代碼中的其他對象來實現此目的,這些對象知道所有的小部件以及如何將信息引導給它們。我覺得這跟SignalR的hub結構相反,就像我們通過這樣做重新發明了輪子。
有沒有人有更好的設計方法的任何想法?感謝您的幫助和感謝您的評論Servy引發這個討論。
另外,這個問題不是重複的。另一個問題不是像保羅這樣的動態對象在下面進行評論。
dup:http://stackoverflow.com/questions/540066/calling-a-function-from-a-string-in-c-sharp – dotNET
不,這個問題是針對動態類型的,另一個問題是針對反射一般來說。 – Paul
你幾乎肯定不想這樣做。你應該*強烈*考慮重新設計你的代碼,這樣你就不需要這樣做。 – Servy