注册字段 c# 的子类的事件

本文关键字:子类 事件 字段 注册 | 更新日期: 2023-09-27 18:36:46

让我这样模拟我的问题。

我有一个层次结构,其中DogCatBird是抽象类Animal的子类。 Bird有一个新事件BirdEvent没有(也不应该)在Animal中。

我有一个类MyObject,它有一个类型为 Animal 的字段(以利用多态性)。假设MyObject的某些实例将用Bird填充其Animal字段,而其他实例将用CatDog填充其字段。如果Animal字段包含 Bird 的实例,我想注册它的BirdEvent。但是由于该字段是Animal型,因此显然不能有BirdEvent

MyObject myObject= new Myobject();
if (myObject.Animal is Bird)
{
     myObject.Animal.BirdEvent += reactToBirdEvent;   
}

有没有办法联系鸟类事件?或者很有可能,我的设计在我没有看到的地方有缺陷吗?

注册字段 c# 的子类的事件

你可以

把它投射到Bird

MyObject myObject= new Myobject();
if (myObject.Animal is Bird)
{
      ((Bird)myObject.Animal).BirdEvent += reactToBirdEvent;   
}

只需使用安全强制转换方法将您的实例投射到Bird

Bird myBird = myObject.Animal as Bird;
if (myBird != null)
{
      myBird.BirdEvent += reactToBirdEvent;   
}