繁体   English   中英

基类和派生类的C#事件处理问题

[英]C# Events handling problem for base and derived classes

在这种情况下,我将创建两个放置在基类中的不同事件处理程序,并分别从Quotes和Charts类订阅它们。 我遇到的问题是,第一个订阅会为第一个事件触发正常,但随后的任何订阅都不会执行。 我提供了两个不同的处理程序(报价和图表)的示例,报价第一次执行没有问题,但是在接收到数据时图表不会触发。

基类:

public abstract class MyBaseClass
{
    protected virtual void RaiseOnQuoteData(string item) { }
    protected virtual void RaiseOnChartData(string item) { }

    void OnDataReceived(object sender, DataEventArgs e)
    {
        if (e.Item == "QUOTE")
            RaiseOnQuoteData(e.Item);
        else if (e.Item == "CHART")
            RaiseOnChartData(e.Item);
    }
}

报价和图表类:

public class Quote : MyBaseClass
{
    public event EventHandler<DataEventArgs<quoteRecord>> OnQuoteData;

    protected override void RaiseOnQuoteData(string item)
    {
        OnQuoteData.Raise<DataEventArgs<quoteRecord>>(this, new DataEventArgs<quoteRecord>(item));
    }
}

public class Chart : MyBaseClass
{
    public event EventHandler<DataEventArgs<chartRecord>> OnChartData;

    protected override void RaiseOnChartData(string item)
    {
        OnChartData.Raise<DataEventArgs<chartRecord>>(this, new DataEventArgs<chartRecord>(item));
    }
}

订阅:

public class QuoteSubscription
{
    public static void SubscribetoQuoteData()
    {
        Quote Q = new Quote();
        Q.OnQuoteData += new EventHandler<DataEventArgs<quoteRecord>>(q_OnQuoteData);
    }

    static void q_OnQuoteData()
    { 
        //Executes fine
    }
}

public class ChartSubscription
{
    public static void SubscribetoChartData()
    {
        Chart C = new Chart();
        C.OnChartData += new EventHandler<DataEventArgs<chartRecord>>(q_OnChartData);
    }

    static void q_OnChartData()
    {
        //Does not execute
    }
}

这是在ASP.NET 4.0中实现的,由于两个类确实共享相同的基类,是否有可能实例化派生的类? 指出原因的任何帮助将不胜感激。

Raise有什么? 这必须是扩展方法,因为EventHandler本身并未定义这种方法。 因此,您可以在其中放置一个断点,看看发生了什么。 (也许您也可以在RaiseOnChartData放置一个断点。)

可能是因为您正在方法范围内创建对象并且已超出范围。 您可能偶然碰到了第一条消息,因为它没有经过GC编辑。 尝试将报价和图表对象创建为静态类成员对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM