c# - 如何正确隐藏基类属性

标签 c# method-hiding

有一个我派生自的基类(黑盒子;不能修改它)。在我的派生类中,我不再希望允许用户使用属性,而是我现在有一个公共(public)函数可供使用。我不会详细说明原因(这无关紧要),但这是我试图隐藏的属性:

public ComboBoxItemCollection Items { get; }

我已经试过了,但是没用:

private new ComboBoxItemCollection Items { get; set; }

我也试过这个,但是编译器说我不允许将两个访问器设为私有(private):

public new ComboBoxItemCollection Items { private get; private set; }

我该如何正确地完成这项工作?请注意,我并不依赖于这是一个完整的安全解决方案,显然通过转换为基类,他们仍然可以调用此属性。这只是为了向用户提供编译时错误,这有助于引导他们意识到他们不能使用此属性,而应该使用派生类中的新函数。

编辑

感谢这个线程中的答案,我想出了以下解决方案:

    [Obsolete( "This property is obsolete. Please use MRUIdComboBox.AddItem() instead.", true )]
    public new ComboBoxItemCollection Items
    {
        get
        {
            throw new NotSupportedException( "This property is not supported. Please use MRUIdComboBox.AddItem() instead." );
        }
    }

最佳答案

你不能。最接近的是:

[Obsolete(IsError=true)]
public new ComboBoxItemCollection Items
{
    get { return base.Items; } // Or throw an exception
}

就我个人而言,我很想问,如果您不想要所有成员,您是否真的应该从中派生...您可以改用组合吗?

关于c# - 如何正确隐藏基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6375030/

相关文章:

c# - asp.net .asmx web 服务 ishow XXE 漏洞 - 外部 DNS

c# - 在表达式树中获取方法的表达式

C# 控制台应用程序最终不调用 block

java - Java中隐藏的方法是什么?甚至 JavaDoc 的解释也令人困惑

c# - 如何对泛型约束类使用方法隐藏(新)

c# - 什么情况下使用 "method hiding"有意义?

C# linq web 服务 json 输出

c# - SQLite 到 Arcgis map