2016-07-06 18 views
-3

別のソリューションに属する2つの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); 
} 

私はそれを実行すると、私はcalledTypeがnullのNullReferenceExceptionを取得します。コメントによると、これはstaticメソッドでのみ機能しますが、私が呼び出そうとしているメソッドはpublic voidです。

これを非静的メソッドで機能するように変更する方法はありますか?それともこれは別の方法でやるべきですか?私はVisual Studio 2015のC#で作業していますが、両方のプロジェクトは.NETです。

+3

このメソッドが属するクラスをインスタンス化するのはなぜですか? – guijob

+6

静的メソッドとインスタンス(非静的)メソッドの違いは何ですか?あなたは、この質問に答えるだけでなく、C#を学ぶために、2つの違いを理解する必要があります。 –

+0

@EdPlunkett私が正しく理解していれば(私はそうではないかもしれませんが、私はC#の初心者です)、プログラムを実行するたびに静的は変わりません。 – AxxieD

答えて

1

クラスのオブジェクトを作成し、ソリューションを既に参照しているときにその関数を使用します。静的メソッドを作成する必要はありません。ソリューション2内で、ソリューション1クラスをインスタンス化します。

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

この方法を使用できます。

cls.somemethod();

スタティックメンバーはオブジェクトではないクラスに属し、クラス名で直接使用できます。静的と非静的の違いをGoogleで確認できます。

+0

あなたの答えを詳述してください。コメントのような回答を投稿するための投票を停止します。 – ViVi

+0

@ViVi編集済み... –

+0

これは私が必要としていたものです。ありがとうございました! – AxxieD

関連する問題