1 Востаннє редагувалося Betterthanyou (11.06.2020 16:50:33)

Тема: Чи можливо замінити звернення до властивості в батьківському класі

Є клас нащадок SomeClassWithParam, який успадковується від SomeClass

public class SomeClassWithParam : SomeClass

В класі SomeClassWithParam перевизначений метод Search

public override void Search()
{
    var sc = GetSearchCondition();

Метод GetSearchCondition викликається із батьківського класу SomeClass

В методі GetSearchCondition є виклик статичної властивості (property)

public static class S
public static AUser User

Виклик виглядає так

S.User

Мені потрібно замінити властивість (property) S.User на іншу властивість.

Чи є можливість це зробити без перевизначення функції GetSearchCondition ?

Пояснення: навіщо це мені

Класи SomeClass, SomeClassWithParam я назва так на форму для спрощення

SomeClass клас містить 4 методи які займають ~1000 рядків і у всіх є S.User властивість. Мені прийдеться переписувати всі ці методи в SomeClassWithParam, так як я не можу змінювати SomeClass тому що він не мій. Намагаюся знайти правильніше рішення, щоб не копіювати майже той самий код

Вибачаюся, якщо складно пояснюю

2

Re: Чи можливо замінити звернення до властивості в батьківському класі

Ну от саме тому статичні члени - майже таке ж зло, як і глобальні змінні.
Замініть використання S.User на виклик методу, що його повертає, і перевизначить цей метод у нащадку.

public class SomeClass
{
    AUser get_user() { return S.User; } //теж погано, але принаймні розберетеся з проблемою
    SearchCondition GetSearchCondition() {
        AUser sUser = get_user(); // далі замість усіх S.User пишемо sUser
        ...
    }
}
public class SomeClassWithParam : SomeClass
{
    AUser overide  get_user() { return ...; } // повертаємо що треба

3

Re: Чи можливо замінити звернення до властивості в батьківському класі

або ще можна використати метод SomeProblemSolve

4

Re: Чи можливо замінити звернення до властивості в батьківському класі

Betterthanyou написав:

Чи є можливість це зробити без перевизначення функції GetSearchCondition ?

... я не можу змінювати SomeClass тому що він не мій.

Коротко: ні.

Детальніше: найкращим рішенням було б те, що запропонував koala, але враховуючи

Betterthanyou написав:

... не можу змінювати ...

воно вам не підійде.

Для мене ця задача виглядає так, що наслідування тут зайве.

Подякували: Betterthanyou1

5 Востаннє редагувалося koala (12.06.2020 08:21:16)

Re: Чи можливо замінити звернення до властивості в батьківському класі

Якщо воно однопоточне, то

public override void GetSearchCondition()
{
    var old_user = S.User;
    S.User = що_там_треба;
    base.GetSearchCondition();
    S.User = old_user; //відновлюємо значення
}

Але це ДУЖЕ брудно.

Відповідь на питання "чи потрібне наслідування" - синонім ствердження "SomeClassWithParam  - це такий SomeClass, що має певні особливості". Якщо воно хибне, то не потрібне.

Подякували: Betterthanyou, leofun012