抽象类作为输出

时间:2016-10-28 01:01:10

标签: c# .net polymorphism

如果我在抽象类中有一个方法:

public virtual DoSomething(out MyBase base1){}

但是在我的派生类中,我需要使用派生自MyBase的类中的方法,我需要这样的东西:

public override DoSomething(out MyBaseCustom base1){}

获得此功能的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我曾经遇到过这个问题。这就是我解决它的方法:

第1步使基类通用

setof/3

第2步从基类派生时,请执行此操作

public abstract class BaseClass<T>
{
    public virtual void DoSomething(out T c)
    {
        // somehow assign c of course
    }
}

不是超级优雅,但做的工作

修改

分别使用抽象方法时

第1步使基类通用

public class DerivedClass : BaseClass<DerivedClass>
{
    public override void DoSomething(out DerivedClass c)
    {
        // somehow assign c of course
    }
}

第2步从基类派生时,请执行此操作

public abstract class BaseClass<T>
{
    public abstract void DoSomething(out T c);
}

答案 1 :(得分:0)

如果可以,我会尝试将out参数设为接口。哪个会给你这样的结果代码:

public abstract class MyClass
{
    public virtual void DoSomething(out IMyObject obj)
    {
        obj = new MyObject();
    }
}

public class MyChildClass : MyClass
{
    public override void DoSomething(out IMyObject obj)
    {
        obj = new MyChildObject();
    }

}

public interface IMyObject
{
}

public class MyObject : IMyObject
{
}

public class MyChildObject : MyObject
{
}