2016-07-06 74 views
-3

我有兩個屬於單獨解決方案的Windows窗體應用程序。我試圖從另一箇中調用一個方法。我從我嘗試訪問的解決方案(Sol1)創建了一個類庫,並在我正在運行的項目(Sol2)中引用它,但是我無法訪問該方法。在另一個項目和名稱空間中調用非靜態方法

我發現這是solution建議做這種方式:

string s = string InvokeStringMethod3 ("TheProject", "TheNamespace", "TheClass", "TheMethod");

public static string InvokeStringMethod3(
         string assemblyName, 
         string namespaceName, 
         string typeName, 
         string methodName) 
{ 
    Type calledType = Type.GetType(namespaceName + "." + typeName + "," + assemblyName); 
    String s = (String)calledType.InvokeMember(
        methodName, 
        BindingFlags.InvokeMethod | BindingFlags.Public | 
         BindingFlags.Static, 
        null, 
        null, 
        null); 
} 

當我運行它,我得到一個NullReferenceException其中calledType爲空。根據評論,這將只適用於static方法,但我試圖調用的方法是public void

有沒有辦法將其修改爲適用於非靜態方法?或者應該以另一種方式做到這一點?我正在Visual Studio 2015中使用C#,並且這兩個項目都是.NET。

+3

爲什麼不直接實例化這個方法所屬的類? – guijob

+6

你明白靜態方法和實例(非靜態)方法有何區別嗎?你需要了解兩者之間的區別,不僅僅是爲了回答這個問題,而是爲了學習C#。 –

+0

@EdPlunkett如果我理解正確(我可能不會,我是C#的新手),但每次運行程序時靜態都保持不變,實例不會。 – AxxieD

回答

1

創建該類的對象並在您已經引用該解決方案時使用其功能。無需創建靜態方法。內部解決方案2實例化您的解決方案1類。

Sol1.MyClass cls = new Sol1.MyClass();

然後你可以使用該方法。

cls.somemethod();

靜態成員屬於類而不是對象,可以直接按類名使用。您可以在Google上查看靜態和非靜態的區別。

+0

請詳細說明您的答案。投票發表評論等答案。 – ViVi

+0

@ViVi編輯... –

+0

這正是我需要的。謝謝! – AxxieD

相關問題