2011-12-27 10 views
1

私は現在.NETとC#を勉強しています。私はかなり新しいので、サーバーとクライアントで「連絡先」を作成する必要があります。私は私のクライアントにそのインターフェイスの.dllファイルを参照するために使用し、それがうまく働いたが、私は今必要アセンブリからインターフェイスをロードし、そのメソッドを使用します。

bool AjouterContact(string num, string nom, string prenom, string mail, string telephone); 
bool SupprimerContact(string num); 
bool ModifierContact(string num, string nom, string prenom, string mail, string telephone); 
List<string[]> RecupererContacts(); 

:私は以下のように、この接触ブックで使用可能な操作を説明し、サーバが使用するインターフェイスを作成しましたこの.dllをすべて動的に読み込みます。これは私がやっていることです:

Assembly a = Assembly.LoadFrom("../../../RemotingInterfaces/bin/Debug/RemotingInterfaces.dll"); 
Module[] modules = a.GetModules(); 
Module module = modules[0]; 
Type[] types = module.GetTypes(); 
foreach (Type type in types) 
{ 
    Console.WriteLine(" Le type {0} a cette (ces) methode (s) : ", type.Name); 
    Console.WriteLine("Type information for:" + type.FullName); 
    Console.WriteLine("\tIs Class = " + type.IsClass); 
    Console.WriteLine("\tIs Enum = " + type.IsEnum); 
    Console.WriteLine("\tAttributes = " + type.Attributes); 
    MethodInfo[] mInfo = type.GetMethods(); 
    foreach (MethodInfo mi in mInfo) 
     Console.WriteLine(" {0}", mi); 
} 

これは動作し、すべてのメソッドをコンソールに書き込みます。しかし、私はこれらの方法の使い方を知りたいです。

私は十分にはっきりしていたと思います。繰り返しますが、.NETとC#の新機能ですので、どのように動作するのかわかりません。

答えて

1

MethodInfo.Invoke()を使用して、リフレクションを使用してメソッドを呼び出します。あなたが掲示した例では、すでにmInfoに格納されているメソッドの配列を持っています。

Invoke()を使用して、最初の引数はあなたが(すなわち、あなたのメソッドを呼び出しているどのオブジェクト)のメソッドを呼び出しているであり、2番目の引数はにパラメータを表すオブジェクトのparams array、あります方法。引数がない場合は、nullに渡すことができます。

+0

私はこの方法で試して、どのように行ったかを伝えます。ありがとうございました。 –

+0

これは私が必要とした方法です、ありがとうございます。 –

+0

素晴らしい、喜んで助けてください:) – wsanville

3

インターフェイスは単なる契約書であり、プロパティやメソッドのリストであり、実際の実装ではありません。インターフェイスは、メソッドGetTheNumberOfStarsInTheSky()がまだ実装されていないこの時点で

public interface IJustAListOfThingsToImplement 
{ 
    int GetTheNumberOfStarsInTheSky(); 
} 

で作業していると使用できないのdllで次のようになります。

ボトムラインは、インターフェイスを取得できますが、まだ定義されていないため使用できません。

これが役に立ちます。

+0

しかし、このメソッドは私のサーバー上のRemoteOperationクラス:MarshalByRefObject、RemotingInterfaces.IRemoteOperationで実装されています。そして私はクライアントの.dllを参照し、RemotingInterfaces.IRemoteOperationオブジェクトを作成することでこれらのメソッドを呼び出すことがありました。それから、私はremoteOperation.METHODNAME()を呼び出さなければなりませんでした。だから、私はMethodInfo.Invoke()メソッドのようなものを探していると思うwsanvilleは以下について答えました。 –

関連する問題