通过另一个类的方法传递要访问的一个类的成员

时间:2019-04-29 06:00:58

标签: c# oop refactoring

我知道标题可能会造成混淆,所以让我描述一下问题。我目前正在重构我们的代码库的一部分。

我们有很多类:例如ABC。这些类大部分相似,并且是易于重构的目标,除了我正在努力的这一行:

// In Class A
SomeType x = r?.abc?.FirstOrDefault();

// In Class B
SomeType x = r?.def?.FirstOrDefault();

// In Class C
SomeType x = r?.ghi?.FirstOrDefault();

r是在此特定语句之前填充的对象。该类具有一堆成员:abcdefghi等。这些类abc中的每个访问只有其中之一。如何在我正在编写的新基类中重构这些语句?

public class BaseClass {
    public T SomeMethod<T>(var param1, var param2, var member) {
        // Some processing. `r` gets populated
        SomeType x = r?.member?.FirstOrDefault(); // I want to do something like this but obviously this won't work. How to solve this?
    }
}

1 个答案:

答案 0 :(得分:2)

public class BaseClass
{
    protected abstract SomeType GetX(OtherType r);

    … SomeType x = GetX(r);
}

public class A
{
    protected override SomeType GetX(OtherType r) => r?.abc?.FirstOrDefault();
}

每个类访问哪个r成员是特定于类的行为,应该进入每个类。