注册字段 c# 的子类的事件
本文关键字:子类 事件 字段 注册 | 更新日期: 2023-09-27 18:36:46
让我这样模拟我的问题。
我有一个层次结构,其中Dog
、Cat
、Bird
是抽象类Animal
的子类。 Bird
有一个新事件BirdEvent
没有(也不应该)在Animal
中。
我有一个类MyObject
,它有一个类型为 Animal
的字段(以利用多态性)。假设MyObject
的某些实例将用Bird
填充其Animal
字段,而其他实例将用Cat
或Dog
填充其字段。如果Animal
字段包含 Bird
的实例,我想注册它的BirdEvent
。但是由于该字段是Animal
型,因此显然不能有BirdEvent
。
MyObject myObject= new Myobject();
if (myObject.Animal is Bird)
{
myObject.Animal.BirdEvent += reactToBirdEvent;
}
有没有办法联系鸟类事件?或者很有可能,我的设计在我没有看到的地方有缺陷吗?
你可以
把它投射到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;
}