[英]How to use abstract classes inside a UserControl
我有一个UserControl
。
我希望每个UserControl
可以重写Abstract方法。
这是我的抽象类:
public class MyAbstract
{
public virtual void LoadData()
{
}
}
这是我的用户控件,也是我最近一次尝试使其工作的尝试:
public partial class ucAbstract : UserControl, MyAbstract
{
public ucAbstract()
{
InitializeComponent();
}
public override void LoadData()
{
base.Load();
{
}
}
}
错误是:
类“ ucAbstract”不能有多个基类:“ UserControl”和“ MyAbstract”
我怎样才能做到这一点?
附加:我可能必须删除此添加并创建一个新问题。
这是我要实现的目标:
我的主要形式包含2个UserControls
: ucOne
, ucTwo
这两个控件都有一个称为“ LoadData”的方法。
我有一个主要形式的功能:
void LoadControl(iuserControl myUserControl)
{
myUserControl.LoadData();
}
这个怎么样。
创建一个包含所有UserControl
通用方法的基class
。 确保使用UserControl
类对其进行了扩展
MyAbstract.cs
public abstract class MyAbstract : UserControl
{
public virtual void LoadData()
{
}
}
然后创建一个UserControl
并使用MyAbstract
类进行扩展。 您可以这样使用。
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,则这肯定不会起作用。 参考: 部分声明,不能指定不同的基类
C#不支持多重继承,您不能从多个类( UserControl
和MyAbstract
)继承。 您可以使用interface
而不是像这样的类:
public interface IMyAbstract
{
void LoadData();
}
然后,您应该像这样实现接口:
public partial class ucAbstract : UserControl, IMyAbstract
{
public void LoadData()
{
}
}
实际上,您需要具有适当CommandParameter
ICommand
对象来代替LoadData()
方法进行条件加载。
您可以创建您的UserControl
Public class MyUserControl : UserControl
{
public virtual LoadData()
{
// ...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.