簡體   English   中英

使用Reflection獲取帶參數的靜態方法

[英]Using Reflection to get static method with its parameters

我正在使用公共靜態類和靜態方法及其參數:

public static class WLR3Logon
{
   static void getLogon(int accountTypeID)
   {}
}

現在我嘗試將其參數的方法提取到另一個類並使用以下代碼:

MethodInfo inf = typeof(WLR3Logon).GetMethod("getLogon",
    BindingFlags.Static | BindingFlags.Public | BindingFlags.FlattenHierarchy);

int[] parameters = { accountTypeId };

foreach (int parameter in parameters)
{
    inf.Invoke("getLogon", parameters);
}

但它給了我錯誤

“你調用的對象是空的。”

我哪里出錯了。

使用以下方法解決了此問題:

using System.Reflection;    
string methodName = "getLogon";
Type type = typeof(WLR3Logon);
MethodInfo info = type.GetMethod(
    methodName, 
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy);

object value = info.Invoke(null, new object[] { accountTypeId } );

這里有很多問題

  • 您的靜態方法是私有的,但您選擇僅在公開可見訪問時過濾的方法。 要么使您的方法公開,要么確保綁定標志包含私有方法。 現在,沒有找到方法返回inf為null,這會導致你的null-ref異常。
  • 參數是一個int數組,其中MethodInfo需要一個對象數組。 您需要確保傳入一個對象數組。
  • 循環遍歷參數僅用於使用整個參數集多次調用該方法。 刪除循環。
  • 您使用方法的名稱調用MethodInfo.Invoke作為第一個參數是無用的,因為當該方法是實例方法時,此參數是實例。 在您的情況下,此參數將被忽略

您的方法是私有的,因為您沒有顯式聲明訪問修飾符。 您有兩種方法可以使代碼按預期工作:

  • 將您的方法更改為public
  • GetMethod調用中指定BindingFlags.NonPublic

讓你的方法public 它應該在那之后工作

 public static class WLR3Logon
 {
       public static void getLogon(int accountTypeID)
       {}
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM