Вызовите InitializeComponent () из суперкласса не xaml.cs - PullRequest
0 голосов
/ 13 января 2019
// BaseObjectWindow.cs
public partial class BaseObjectWindow : Window {

    public BaseObjectWindow() {
        // I want to call InitializeComponent() here
    }

    //more constructors

}

// AccountWindow.xaml.cs
public partial class AccountWindow : BaseObjectWindow {

    // I want to remove this whole constructor
    public AccountWindow() : base() {
        InitializeComponent();
    }
}

Я хочу иметь возможность вызывать InitializeComponent() из базового класса, поэтому мне не нужно вызывать его в подклассах. Причина, по которой я хочу это сделать, заключается в том, что BaseObjectWindow имеет несколько конструкторов, а C # отказывается неявно наследовать все конструкторы, если вы определите хотя бы один.

Я думаю, что могу сэкономить много времени, обойдя объявление всего конструктора для каждого окна подкласса, которое мне нужно сделать (не менее 20), но я не могу этого сделать, если не могу вызвать InitializeComponent() В противном случае окна подкласса инициализируются как пустое окно.

Есть ли способ обойти это чисто?

1 Ответ

0 голосов
/ 13 января 2019

Что вы можете сделать, это объявить виртуальный / абстрактный метод в вашем базовом классе, который вы вызываете в своих конструкторах. Переопределите его в своем производном классе и вызовите InitializeComponent там.
Примечание: Вызов виртуального метода в конструкторе может привести к некоторым проблемам. Смотрите также Виртуальный членский вызов в конструкторе

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

public abstract class BaseWindow : Window
{
    protected BaseWindow()
    {
        OnInitialize();
    }

    public abstract void OnInitialize();
}
public partial class DerivedWindow : BaseWindow
{
    public override void OnInitialize()
    {
        InitializeComponent();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...