是否有可能在C#中的通用函數獲取作爲輸入一些類和方法(的類)和參數的方法(也許結果類型)並創建該類的實例並使用參數調用該類的函數並返回結果?C#使通用的方法知道如何調用「某些」類的功能
0
A
回答
3
當然。
public class MyClass
{
public class Test
{
public int TestMethod(int a, int b)
{
return a + b;
}
}
public static void Main()
{
int result = ExecuteMethod<Test, int>("TestMethod", 1, 2);
Console.Read();
}
public static TResult ExecuteMethod<TClass, TResult>(string methodName, params object[] parameters)
{
// Instantiate the class (requires a default parameterless constructor for the TClass type)
var instance = Activator.CreateInstance<TClass>();
// Gets method to execute
var method = typeof(TClass).GetMethod(methodName, BindingFlags.Public | BindingFlags.Instance);
// Executes and returns result
return (TResult)method.Invoke(instance, parameters);
}
}
+0
謝謝,這就是我搜索的! –
1
2
除非反思是你絕對的選項,使用下面的代表之一:
Action<T>
:會讓你執行一個不返回值的方法。有幾個重載可以讓你傳入更多的參數。Func<TResult>
:是否允許您執行返回類型爲TResult
的結果的方法。有更多的重載可以讓你傳入更多的參數。他們都遵循語法Func<T1, T2, T3, TResult>
等。最後,你可以定義你自己的委託。
1
以下是如何使用反射創建類的實例,然後調用該類的方法。
假設你有一個類:
public class MyType
{
public void DoSomething()
{
// do stuff here
}
}
你可以做到以下幾點:
Type instanceType = Type.GetType("MyType");
object instance = Activator.CreateInstance(instanceType);
MethodInfo method = instanceType.GetMethod("MethodName");
object returnValue = method.Invoke(instance, new object[] { /* paramaters go here */ });
相關問題
- 1. C#類的方法只能從某些項目調用嗎?
- 2. 防止某些類使用屬性調用某些方法
- 3. 如何知道調用繼承類的方法的類?
- 4. 我不知道如何調用我自己的功能! C++
- 5. 調用方法如何知道被調用方法拋出哪些異常?
- 6. 不知道如何調用paint方法
- 7. 界面如何知道哪個類的方法調用?
- 8. 如何在不知道類名的情況下調用方法?
- 9. 無法在Java中創建類。不知道在某些方法
- 10. 通用類中的C#調用方法
- 11. 知道哪些功能被可可應用程序調用
- 12. JAVA:知道從哪裏調用靜態方法的方法/類
- 13. 只能在某些類型的文件上啓用perforce通知
- 14. 如何使用Dispose()方法處理某些類型的圖像
- 15. 某些方法如何知道事先進行論證?
- 16. 不知道如何調用我的功能
- 17. 使用spring/pojo在類中調用某些方法?
- 18. 如何調用每種方法在某些陣列使用jQuery
- 19. 如何使用Ruby minitest框架調用某些方法?
- 20. 如何用jQuery提供某些功能?
- 21. 如何用HttpClient對象調用或某些類似方法替換curl調用?
- 22. Xcode - 如何知道哪些類使用或導入了某個類?
- 23. 如何找到調用某些方法的所有地方?
- 24. 如何在我知道該類時正確調用方法?
- 25. 如何調用某些WPF用戶控件的「隱藏」方法
- 26. 日誌C++類的方法調用者(功能名,行號)
- 27. 方法如何知道它被調用的地方?
- 28. C#功能使用重載的方法
- 29. 從某些引用變量(不是該類的孩子)的方法知道類的方式是什麼
- 30. 如何使方法調用C#類中的另一個方法?
你應該能夠反射 –
做到這一點,你可以添加代碼,請... –
看這裏:http://msdn.microsoft.com/library/system.type.getconstructor%28v=vs.110%29.aspx和http://msdn.microsoft.com/library/system.type.getconstructor%28v=vs .110%29.aspx –