从另一个类别中提升事件 - 解决方法

时间:2017-10-23 10:04:13

标签: c#

我需要从另一个班级举起一个活动 - 我知道这是不可能的 - 但我需要一个解决方法。

现在我正在做以下

这是必须提升事件的类

internal class DataTransfer
{
  public delegate void EventHandler(object sender, OnReaderCommonEventArgs e);
  public event EventHandler _OnSerialNumber;
  public event EventHandler _OnReaderType

Task DataHandler()
{
 //Recieving-Data and Stuff
_OnSerialNumber(this, new OnReaderCommonEventArgs { SerialNumber = RFIDParser.ParseSerialNumber(data) });
_OnReaderType(this, new OnReaderCommonEventArgs { ReaderType = RFIDParser.ParseReaderType(data) });
}
}

在Main-Class中,将由用户使用。因此,用户只能从此类对象订阅该事件:

public partial class PUR_100U
{
        public delegate void EventHandler(object sender, OnReaderCommonEventArgs e);
        public event EventHandler OnSerialNumber;
        public event EventHandler OnReaderType;

        public PUR_100U(int portnumber)
        {
            dataTransfer = new DataTransfer(portnumber, GetIdentifierList());

            dataTransfer._OnSerialNumber += dataTransfer__OnSerialNumber;
            dataTransfer._OnReaderType += dataTransfer__OnReaderType;
        }
        void dataTransfer__OnSerialNumber(object sender, OnReaderCommonEventArgs e)
        {
            if (OnSerialNumber != null) { OnSerialNumber(this, new OnReaderCommonEventArgs { SerialNumber = e.SerialNumber }); }
        }

        void dataTransfer__OnReaderType(object sender, OnReaderCommonEventArgs e)
        {
           if (OnReaderType != null) { OnReaderType(this, new OnReaderCommonEventArgs { ReaderType = e.ReaderType }); }
        }
}

用户使用示例:

rfid = new PUR_100U(20);
rfid.OnSerialNumber += rfid_OnSerialNumber;
rfid.OnReaderType += rfid_OnReaderType;

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

  

我需要从另一个班级举起一个活动 - 我知道这是不可能的 - 但我需要一个解决方法。

这相当简单:

class Foo
{
    public event EventHandler Fooed; //note, name is not OnFoo
    public void FireFooed() => Fooed?.Invoke(this, new EventArgs);
}

现在,随意开火:

var foo = new Foo();
foo.FireFooed();

问题是,你为什么要这样做?这似乎是一个非常糟糕的主意。 Fooed应仅触发,且仅当 Foo内的前提条件才能触发时才会触发;如果您需要点击Fooed,那么会让前提条件发生

如果条件不满足,则随意点击Fooed会破坏所有其他听众,不要那样做