簡體   English   中英

如何在UserControl中使用抽象類

[英]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個UserControlsucOneucTwo

這兩個控件都有一個稱為“ 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#不支持多重繼承,您不能從多個類( UserControlMyAbstract )繼承。 您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM