[英]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.