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

时间:2016-02-29 12:41:33

标签: c# oop events

让我像这样建模我的问题。

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

我有一个类MyObject,其字段为Animal(利用多态性)。假设MyObject的某些实例会将Animal字段填充Bird,其他Cat填充DogAnimal。如果Bird字段包含BirdEvent的实例,我想注册其Animal。但由于字段属于BirdEvent类型,因此显然不能有MyObject myObject= new Myobject(); if (myObject.Animal is Bird) { myObject.Animal.BirdEvent += reactToBirdEvent; }

<script>
     $("facebook.com").on("click",function(){
         window.open('www.facebook.com','_blank');
     });
</script>

有没有办法可以到达BirdEvent?或者很可能,我的设计在我看不到的地方有缺陷吗?

2 个答案:

答案 0 :(得分:4)

您可castBird

MyObject myObject= new Myobject();

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

答案 1 :(得分:2)

使用safe-cast-approach

简单地将您的实例投射到Bird
Bird myBird = myObject.Animal as Bird;
if (myBird != null)
{
      myBird.BirdEvent += reactToBirdEvent;   
}