如何在 UserControl 中使用抽象 类
How to use abstract classes inside a UserControl
我有一个UserControl
。
我希望每个 UserControl
重写一个抽象方法。
这是我的摘要class:
public class MyAbstract
{
public virtual void LoadData()
{
}
}
这是我的用户控件,我最近尝试让它工作:
public partial class ucAbstract : UserControl, MyAbstract
{
public ucAbstract()
{
InitializeComponent();
}
public override void LoadData()
{
base.Load();
{
}
}
}
错误是:
Class 'ucAbstract' cannot have multiple base classes: 'UserControl' and 'MyAbstract'
我该怎么做?
附加:
我可能不得不删除此添加并创建一个新问题。
这就是我想要实现的目标:
我的主窗体包含 2 个 UserControls
:ucOne
、ucTwo
这两个控件都有一个名为 'LoadData' 的方法。
我的主窗体有一个函数:
void LoadControl(iuserControl myUserControl)
{
myUserControl.LoadData();
}
C# 不支持多重继承,您不能继承多个 classes(UserControl
和 MyAbstract
)。您可以像这样使用 interface
而不是 class:
public interface IMyAbstract
{
void LoadData();
}
那么你应该像这样实现接口:
public partial class ucAbstract : UserControl, IMyAbstract
{
public void LoadData()
{
}
}
您实际上需要 ICommand
具有适当 CommandParameter
的对象来代替您的 LoadData()
方法进行条件加载。
您可以创建您的用户控件
Public class MyUserControl : UserControl
{
public virtual LoadData()
{
// ...
}
}
这个怎么样。
创建一个 Base class
,其中包含您 UserControl
的所有常用方法。确保使用 UserControl
class
对其进行扩展
MyAbstract.cs
public abstract class MyAbstract : UserControl
{
public virtual void LoadData()
{
}
}
然后创建一个 UserControl
并用 MyAbstract
class 扩展它。你可以这样使用。
ucAbstract.xaml.cs
public partial class ucAbstract : MyAbstract
{
public ucAbstract()
{
InitializeComponent();
}
public override void LoadData()
{
base.LoadData();
{
}
}
}
此外,您需要在 xaml
中使用 <local:MyAbstract>
而不是 <UserControl>
ucAbstract.xaml
<local:MyAbstract x:Class="YourNamespace.ucAbstract"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:YourNamespace"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<TextBox />
</StackPanel>
</local:MyAbstract>
注:
- 您可以使用
MyAbstract
作为 BaseClass 创建多个 UserControl
。
UserControls
只允许一级继承,至少如果
MyAbstract
有一个 XAML 这肯定行不通。
参考: Partial declarations, must not specify different base classes
我有一个UserControl
。
我希望每个 UserControl
重写一个抽象方法。
这是我的摘要class:
public class MyAbstract
{
public virtual void LoadData()
{
}
}
这是我的用户控件,我最近尝试让它工作:
public partial class ucAbstract : UserControl, MyAbstract
{
public ucAbstract()
{
InitializeComponent();
}
public override void LoadData()
{
base.Load();
{
}
}
}
错误是:
Class 'ucAbstract' cannot have multiple base classes: 'UserControl' and 'MyAbstract'
我该怎么做?
附加: 我可能不得不删除此添加并创建一个新问题。
这就是我想要实现的目标:
我的主窗体包含 2 个 UserControls
:ucOne
、ucTwo
这两个控件都有一个名为 'LoadData' 的方法。
我的主窗体有一个函数:
void LoadControl(iuserControl myUserControl)
{
myUserControl.LoadData();
}
C# 不支持多重继承,您不能继承多个 classes(UserControl
和 MyAbstract
)。您可以像这样使用 interface
而不是 class:
public interface IMyAbstract
{
void LoadData();
}
那么你应该像这样实现接口:
public partial class ucAbstract : UserControl, IMyAbstract
{
public void LoadData()
{
}
}
您实际上需要 ICommand
具有适当 CommandParameter
的对象来代替您的 LoadData()
方法进行条件加载。
您可以创建您的用户控件
Public class MyUserControl : UserControl
{
public virtual LoadData()
{
// ...
}
}
这个怎么样。
创建一个 Base class
,其中包含您 UserControl
的所有常用方法。确保使用 UserControl
class
MyAbstract.cs
public abstract class MyAbstract : UserControl
{
public virtual void LoadData()
{
}
}
然后创建一个 UserControl
并用 MyAbstract
class 扩展它。你可以这样使用。
ucAbstract.xaml.cs
public partial class ucAbstract : MyAbstract
{
public ucAbstract()
{
InitializeComponent();
}
public override void LoadData()
{
base.LoadData();
{
}
}
}
此外,您需要在 xaml
中使用<local:MyAbstract>
而不是 <UserControl>
ucAbstract.xaml
<local:MyAbstract x:Class="YourNamespace.ucAbstract"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:YourNamespace"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
<TextBox />
</StackPanel>
</local:MyAbstract>
注:
- 您可以使用
MyAbstract
作为 BaseClass 创建多个UserControl
。 UserControls
只允许一级继承,至少如果MyAbstract
有一个 XAML 这肯定行不通。
参考: Partial declarations, must not specify different base classes