Передайте, какой член класса доступен в методе другого класса - PullRequest
1 голос
/ 29 апреля 2019

Я понимаю, что название может сбивать с толку, поэтому позвольте мне описать проблему. В настоящее время я занимаюсь рефакторингом раздела нашей кодовой базы.

У нас есть несколько классов: скажем, A, B, C. Эти классы в основном похожи и являются легкой целью рефакторинга, за исключением одной строки, с которой я борюсь:

// 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 - это объект, который заполняется перед этим конкретным оператором. Этот класс имеет несколько членов: abc, def, ghi и т. Д. Каждый из этих классов a, b, c имеет доступ только к одному из них. Как изменить эти утверждения в новом базовом классе, который я пишу?

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 Ответ

2 голосов
/ 29 апреля 2019
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 обращается каждый класс, это поведение, характерное для класса, и должно входить в каждый класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...