覆盖抽象方法时,如何处理不同的返回类型

时间:2020-03-23 06:34:10

标签: c# inheritance abstract return-type

说我有以下课程:

public abstract class A
{
    protected abstract ReturnA Foo();

    public void UseFoo()
    {
        var foo = Foo();

        if (foo != null)
        {
            //logic here
        }
    }
}

public class B : A
{
    protected override ReturnA Foo()
    {
        // Implementation specific code that returns ReturnB instead.
    }
}

public class C : A
{
    protected override ReturnA Foo()
    {
        // Implementation specific code that returns ReturnC instead.
    }
}

public class ReturnA
{
    public int Id { get; set; }
    public string Address { get; set; }
}

public class ReturnB
{
    public string Id { get; set; }
    public string PhoneNumber { get; set; }
}

public class ReturnC
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

我知道C#不支持派生的返回类型,但这也不是我所需要的。 B和C类是特定于实现的,因此它们的返回类型彼此无关。

之所以要处理此问题,是因为类A中的UseFoo方法可能具有一些通用检查和其他通用逻辑,这些逻辑与返回的对象本身无关。 因此,我只想“外包”特定于实现的代码,而不必抽象UseFoo并使每个实现都编写相同的通用代码。

有没有办法解决这个问题?

编辑:ReturnCReturnB都不来自ReturnA。更新了示例。

0 个答案:

没有答案
相关问题