0

我有以下 C# 类:

class BufferedSplitPanel : SplitterPanel
{
    public BufferedSplitPanel()
    {
         this.DoubleBuffered = true;
    }
}

但是编译器(和 Intellisense)告诉我this没有这样的成员DoubleBuffered(或任何其他成员)。MSDN 明确声明它确实如此,因为它继承自 Panel。如果我将其更改SplitterPanelPanel编译。我究竟做错了什么?

4

2 回答 2

2

SplitterPanelsealed类而Panel不是类。

你不能从sealed类型派生。

文档

密封类不能被继承。使用密封类作为基类是错误的。在类声明中使用sealed 修饰符来防止类的继承。

如果你想扩展sealed类的功能,最好的方法 [IMO] 是创建扩展方法。例如:

public static class SplitterPanelExtensions {
    public static void MyAdvancedMethod(this SplitterPanel splitterPanel) {
        /*
         * Check if splitterPanel is null and throw ArgumentNullException.
         * because extension methods are called via "call" IL instruction.
         */
        //Implementation.
    }

    //Other extension methods...
}

另一种方法是创建将保存密封类实例的类。如果您想隐藏要包装的类接口的某些部分,这是一个更好的选择。例如:

public class SplitterPanelWrapper {
    private readonly SplitterPanel m_SplitterPanel;

    public SplitterPanelWrapper(SplitterPanel splitterPanel) {
        m_SplitterPanel = splitterPanel;
    }

    //Other implementation. 
}
于 2013-03-01T07:29:20.917 回答
1

我在MSDN 文档中看不到任何 DoubleBuffered 属性。你确定你需要那个属性吗?使用它似乎也没有多大意义。

除此之外,MSDN 还说该类是seal。你不能从中得到。你应该得到编译器错误。

于 2013-03-01T07:28:33.303 回答