2009-12-22 6 views
0

C#에서 클래스 라이브러리 (API)를 작성했습니다. 클래스는 정적이 아니며 여러 공개 이벤트를 포함합니다. 별도의 클래스에서 정적 메서드로 이벤트를 트리거 할 수 있습니까? 예를 들어 ...정적 클래스에서 비 정적 클래스 트리거?

class nonStaticDLLCLASS 
{ 
    public event Event1; 

    public CallStaticMethod() 
    { 
    StaticTestClass.GoStaticMethod(); 
    } 
} 

class StaticTestClass 
{ 
    public static GoStaticMethod() 
    { 
    // Here I want to fire Event1 in the nonStaticDLLCLASS 
    // I know the following line is not correct but can I do something like that? 

    (nonStaticDLLCLASS)StaticTestClass.ObjectThatCalledMe.Event1(); 

    } 
} 

난 당신이 일반적으로이 방법입니다 만,이 경우 인스턴스가 이미 그냥 클래스에 의해 생성 된 액세스하기 위해 비 정적 클래스의 인스턴스를 만들 필요가 알고 액세스하려고합니다.

답변

3

인스턴스 방법은 인스턴스에서 호출 할 수 있습니다. 귀하의 예제에서 인스턴스는 정적 메서드를 호출합니다. 정적 메소드에 인스턴스가 자신에 대한 참조를 전달할 수 있도록 매개 변수를 제공 할 수 있습니까? 이런 식으로 뭔가 :

class nonStaticDLLCLASS 
{ 
    public event Event1; 

    public CallStaticMethod() 
    { 
    StaticTestClass.GoStaticMethod(this); 
    } 
} 

class StaticTestClass 
{ 
    public static GoStaticMethod(nonStaticDLLCLASS instance) 
    { 
    // Here I want to fire Event1 in the nonStaticDLLCLASS 
    // I know the following line is not correct but can I do something like that? 

    instance.Event1(); 

    } 
} 

나는 당신이이 같은, 또는 왜 인스턴스가 자신의 이벤트를 발생시킬 수 없습니다 할 수없는 이유를 지정하는 질문을 명확히 할 필요가 있다고 생각합니다.

+0

그건 의미가 있습니다. 내 두뇌가 제대로 작동하지 않는 것 같아! – PICyourBrain

4

아니요, 인스턴스 멤버는 유효한 유형 인스턴스에서만 호출/액세스 할 수 있습니다.

이 작업을 수행하려면 nonStaticDLLCLASS의 인스턴스를 StaticTestClass.GoStaticMethod으로 전달하고 해당 인스턴스 참조를 사용하여 비 정적 멤버를 호출하거나 액세스해야합니다.

위의 예에서 액세스하는 유형의 인스턴스를 어떻게 지정합니까? 정적 메서드는 어떤 인스턴스에 대한 지식도 가지고 있지 않으므로 사용할 인스턴스가 무엇인지 또는 메모리에로드 된 인스턴스가 있는지 어떻게 알 수 있습니까?

이 예제를 고려하십시오

using System; 

class Dog 
{ 
    public String Name { get; set; } 
} 

class Example 
{ 
    static void Main() 
    { 
     Dog rex = new Dog { Name="Rex" }; 
     Dog fluffy = new Dog { Name="Fluffy" }; 
    } 
    static void sayHiToDog() 
    { 
     // In this static method how can I specify which dog instance 
     // I mean to access without a valid instance? It is impossible since 
     // the static method knows nothing about the instances that have been 
     // created in the static method above. 
    } 
    static void sayHiToDog(Dog dog) 
    { 
     // Now this method would work since I now have an instance of the 
     // Dog type that I can say hi to. 
     Console.WriteLine("Hello, " + dog.Name); 
    } 
}