2013-07-15 2 views
0

C#에서 생성자, 상속 및 이벤트 구독과 관련된 문제가있는 것 같습니다. 텍스트입니다 내가 원하는생성자의 이벤트에 상속 된 메서드를 가입시킨 다음 상속 된 클래스에서 해당 생성자를 호출합니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace EventTest 
{ 
    public class Widget 
    { 
     public delegate void MyEvent(); 
     public event MyEvent myEvent; 

     public void SetEvent() 
     { 
      myEvent(); 
     } 
    } 

    public class Base 
    { 
     Widget myWidget; 

     protected Base() { } 

     protected Base(Widget awidget) 
     { 
      myWidget = awidget; 
      myWidget.myEvent += myEvent; 
     } 

     public void myEvent() { } 
    } 

    public class Derived : Base 
    { 
     public Derived(Widget awidget) : base(awidget) { } 

     new public void myEvent() 
     { 
      System.Console.WriteLine("The event was fired, and this text is the response!"); 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Widget myWidget = new Widget(); 
      Derived myDerived = new Derived(myWidget); 

      myWidget.SetEvent(); 
     } 
    } 

} 

가 표시 될 :

는 다음과 같은 C# 프로그램을 고려하십시오. 즉 상속 된 기본 메서드를 기본 클래스의 이벤트에 구독 한 다음 하위 클래스의 생성자를 호출하고 해당 이벤트가 발생할 때 하위 클래스의 이벤트 메서드가 기본 클래스 대신 호출되도록 할 수 있습니다.

이렇게 할 방법이 있습니까?

답변

1

당신은 가상 방법을 설정해야합니다

public class Base 
{...  

    public virtual void myEvent() { } 

을 그리고 우선 그것을

public class Derived : Base 
{ 
    ... 

    public override void myEvent() 
    { 
     System.Console.WriteLine("The event was fired, and this text is the response!"); 
    } 
} 
0
new public void myEvent() 

이것은 새로운 이벤트를 생성합니다. 너는 그걸 원하지 않아. 기본 클래스에 virtual 이벤트를 만들고 여기에 new 대신 override을 사용합니다.

0

기본 클래스 메소드를 가상으로 표시하면 문제가 해결됩니다.

public virtual void myEvent() { } 
관련 문제