Как реализовать общую часть для управления пользователем с наследством? - PullRequest
1 голос
/ 21 ноября 2010

У меня есть общие части для всего пользовательского контроля. Это определено в интерфейсе, скажем, MyInterface.

Затем я реализую часть этого класса, скажем, MyBaseClass:

class MyBaseClass : MyInterface    
{    
//......    
}

Тогда, когда я создаю пользовательский элемент управления, я хочу, чтобы этот пользовательский элемент управления имел реализацию общей части. Поэтому я хочу изменить код для MyControl следующим образом:

public partial class MyControl : UserControl, MyBaseClass
    {
        public MyControl()
        {
            InitializeComponent();
        }
    }

но система выдаст мне ошибку. причина: Mybase не является частичным классом. если изменить MyBaseClass как частичный, все равно получите ошибку, скажем что-то вроде «не разрешать множественный базовый класс».

Одно решение похоже на

public partial class MyUserControl : UserControl, MyInterface
    {
        public MyUserControl ()
        {
            InitializeComponent();
        }
    }

но это приведет к дублированию реализации для каждого пользовательского элемента управления. Многие копируют и вставляют. Я не хочу к этому пути.

Пробовал следующим образом:

public class MyBaseClass : UserControl, MyInterface

или

public partial class MyBaseClass : UserControl, MyInterface

Я получил ошибку: Частичные объявления MyUserControl не должны указывать разные базовые классы

Как решить эту проблему?

1 Ответ

0 голосов
/ 21 ноября 2010

Я предлагаю вам пойти с этим: -

public class MyBaseClass : UserControl, MyInterface 

Что вы пробовали, но есть поворот. Когда вы затем захотите создать производный UserControl из этого, начните со стандартного Usercontrol, но затем измените файл code-behind на: -

public partial class MyDerivedClass : MyBaseClass

и

изменить Xaml на: -

<local:MyBaseClass x:Class="MyNamespace.MyDerivedClass"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyNamespace"
>
    <Grid x:Name="LayoutRoot" Background="White">
    </Grid>
</local:MyBaseClass>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...