说我有以下课程:
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并使每个实现都编写相同的通用代码。
有没有办法解决这个问题?
编辑:ReturnC
和ReturnB
都不来自ReturnA
。更新了示例。