2016-07-06 3 views
-3

별도의 솔루션에 속하는 두 개의 Windows Forms 응용 프로그램이 있습니다. 다른 하나를 사용하여 메서드를 호출하려고합니다. 나는 (솔 1) 액세스하려고하는 솔루션에서 클래스 라이브러리를 생성하고 (솔 2) 내가 실행중인 프로젝트에서 참조하지만 난 방법을 액세스하는 데 어려움을 겪고있어. 다른 프로젝트 및 네임 스페이스에서 비 정적 메서드 호출

나는 이런 식으로 일을 제안이 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#을 배우려면 두 가지의 차이점을 이해해야합니다. –

+0

@EdPlunkett 올바르게 이해하면 (C#을 처음 접했을 때) 정적 인 경우 프로그램을 실행할 때마다 정적으로 유지되지만 인스턴스는 그렇지 않습니다. – AxxieD

답변

1

클래스의 개체를 만들고 이미 솔루션을 참조한 경우 해당 함수를 사용하십시오. 정적 메서드를 만들 필요가 없습니다. 내부 솔루션 2는 솔루션 1 클래스를 인스턴스화합니다.

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

그런 다음이 방법을 사용할 수 있습니다.

cls.somemethod();

정적 구성원은 개체가 아닌 클래스에 속하므로 클래스 이름으로 직접 사용할 수 있습니다. Google에서 정적 및 비 정적의 차이를 확인할 수 있습니다.

+0

답을 자세히 설명해주십시오. 의견과 같은 답변을 게시하기 위해 아래로 투표하십시오. – ViVi

+0

@ViVi 편집 ... –

+0

이것은 내가 필요한 것입니다. 고맙습니다! – AxxieD