2011-12-27 3 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()를 사용하여 첫 번째 인수는 당신이 (즉, 당신이 메서드를 호출 할 객체한다)의 메소드를 호출하는 이고, 두 번째 인수는에 매개 변수를 나타내는 객체의 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이 아래에 대해 대답했습니다. –

관련 문제