C#如何动态转换对象

时间:2015-04-29 17:37:35

标签: c# inheritance casting

public class TriggerableObject 
{
    Trigger(){
        DoSomething();
    }
}
public class X : TriggerableObject
{
    Trigger(){
        DoSomethingElse();
    }
}
public class X2 : TriggerableObject
{
    Trigger(){
        DoSomethingOther();
    }
}
public class Trigger
{
    TriggerableObject obj = FindMyObject();
    obj.Trigger();
}

Class Trigger从其他对象中查找类X,但是当它调用Trigger()时,将调用基类中的方法(DoSomething())。但是,我希望它从类X(DoSomethingElse())调用Trigger,如果我将其转换为类X,它会起作用。问题是我不知道找到的类是X还是X2,所以如果我静态地将它投射到X,然后它不适用于X2 我如何使这项工作?

1 个答案:

答案 0 :(得分:0)

接口是您的朋友。如果您的代码中有特定的结构(如您所示)但实现方式不同,请考虑 interfaces 。当然,这并不总是答案,但您的上述示例可以通过以下方式编写。

public interface ITriggerableObject 
{
    Trigger();
}
public class X : ITriggerableObject 
{
    Trigger(){
        DoSomethingElse();
    }
}
public class X2 : ITriggerableObject 
{
    Trigger(){
        DoSomethingOther();
    }
}
public class Trigger
{
    ITriggerableObject obj = FindMyObject();
    obj.Trigger();
}

语法可能已关闭,因为我没有编译它,但语义是可靠的。

.NET Interfaces