簡體   English   中英

如何從控件類和抽象類繼承?

[英]How can I inherit from a control class and an abstract class?

我有一個帶有接受參數的方法的類,該參數必須是具有預期方法的Control。
我已經用這些方法創建了一個接口。
我創建了一個抽象類,該類繼承自Control,並實現了將所有方法抽象的接口(這是我上面的參數的類型)。
然后,我創建了一個繼承自TableLayoutPanel的類並實現了該接口。
我創建了此類的實例,但隨后我無法將其用作參數。
我知道為什么。 但是,解決方法是什么? 我知道我可以在返回Control實例的接口中添加一個方法。 在這種情況下,是TableLayoutPanel,但是我想使用實例本身...
另外,我不想在接收參數的方法內部進行強制類型轉換,例如在庫中使用時必須“編譯時/類型安全” ...

class CollapsibleList : Panel
{
    public void AddItem(CollapsibleListItem item)
    {
        someContainer.Controls.Add(item);
        item.CollapsibleListItemCollapse();
    }    
}

public interface ICollapsibleListItem
{
    string CollapsibleListItemName { get; }
    void CollapsibleListItemCollapse();
    void CollapsibleListItemExpand();
}

public abstract class CollapsibleListItem : Control, ICollapsibleListItem
{
    public abstract string CollapsibleListItemName { get; }
    public abstract void CollapsibleListItemCollapse();
    public abstract void CollapsibleListItemExpand();
}

class ListBoxCollapsibleListItem : TableLayoutPanel, ICollapsibleListItem
{
    //... implemented interface methods
}

class Main
{
    public void SomeMethod()
    {
        var item = new ListBoxCollapsibleListItem();
        var collapsibleList = new CollapsibleList();
        collapsibleList.AddItem(item as CollapsibleListItem); //cast error!
    }
}

試試下面,

collapsibleList.AddItem(item為ICollapsibleListItem);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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