2011-12-27 61 views
1

我目前正在學習.NET和C#,所以我對它很新,並且必須創建一個與服務器和客戶端的「聯繫簿」。我創建了一個描述這個通訊錄中可用的操作,如下面服務器所使用的接口:從程序集加載接口並使用它的方法

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和它工作得很好,但我現在需要動態加載這個.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(),第一個參數是要調用上(即,哪個對象要調用的方法)的方法中,第二個參數是對象的params array,這表示參數到方法。如果沒有參數,您可以通過null

+0

我會嘗試這種方式,並告訴它如何去。謝謝。 – 2011-12-27 17:44:49

+0

這是我需要的方法,謝謝。 – 2012-01-04 23:06:27

+0

太棒了,很高興幫助:) – wsanville 2012-01-05 14:45:01

3

該接口只是一個合同,它是一個屬性和方法的列表,而不是實際的實現。接口看起來像這樣在DLL中你與

public interface IJustAListOfThingsToImplement 
{ 
    int GetTheNumberOfStarsInTheSky(); 
} 

工作在這一點上的方法GetTheNumberOfStarsInTheSky()還沒有實現,不能使用。底線是,你可以得到接口,但你不能使用它的方法,因爲它尚未定義。

希望這會有所幫助。

+0

但是這個方法是在我的服務器上實現的類RemoteOperation:MarshalByRefObject,RemotingInterfaces.IRemoteOperation。我曾經通過引用客戶端中的.dll和創建RemotingInterfaces.IRemoteOperation對象來調用這些方法。然後我只需要調用remoteOperation.METHODNAME();所以我認爲我看起來像下面的wsanville回答的MethodInfo.Invoke()方法。 – 2011-12-27 17:18:38

相關問題