c# - 如何阻止新修改器?

标签 c# properties overriding new-operator

我在基类中有一个属性,出于任何原因我都不想覆盖它。它为类分配一个 ID,以便与我创建的 ThreadQueue 一起使用。我认为任何人都没有理由覆盖它。我想知道如何阻止任何人尝试覆盖它,除非他们更改其修饰符。

private int _threadHostID = 0;
    public int ThreadHostID
    {
        get
        {
            if (_threadHostID == 0)
            {
                _threadHostID = ThreadQueue.RequestHostID();
            }
            return _threadHostID;
        }
    }

编辑:完全忘记了语言:C#。

Edit2:它不是虚拟的或覆盖任何其他东西所以请不要密封

最佳答案

首先:“覆盖”是指虚拟覆盖。您是在谈论创建隐藏 方法,而不是覆盖 方法。

I have a property in a base class that I don't want hidden

你可以自由地想要它,但你将不得不学会忍受没有得到你想要的东西的失望。

I see no reason whatsoever for anyone to hide it.

那就不会有问题了吧?如果没有人可能想要隐藏它,那么他们就不会隐藏它。你基本上是在说“我有一个对任何人都没有值(value)的对象;我如何防止有人偷它?”好吧,如果它没有值(value),那么就没有人会想要偷它,那么你为什么要花钱买一个保险箱来保护一开始就没人想偷的东西呢?

如果没有人有理由隐藏或覆盖您的方法,那么就没有人会这样做。如果有人有理由隐藏或覆盖您的方法,那么您有什么资格告诉他们不要这样做?您正在提供一个基类;你是派生类作者的仆人,而不是他们的主人

现在,有时成为一名优秀的仆人意味着要构建能够防止误用、坚固耐用且价格合理的产品。例如,我鼓励人们构建密封类。设计满足继承者实际需要的安全、健壮、可继承的类既昂贵困难

但是,如果您要创建一个健壮的未密封基类,专为继承而设计,那么为什么要阻止派生类作者隐藏,如果他们有理由这样做呢?它不可能伤害基类。它唯一可能伤害的人是派生类的用户,而这些人是派生类作者的问题,而不是你的问题。

关于c# - 如何阻止新修改器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331416/

相关文章:

javascript - angular 2+ 属性不是 @Input() 中指定的已知属性

objective-c - 如何用更具体的类型覆盖父类(super class)的属性?

c++ - 覆盖抽象基类中的函数

c# - 如何在 C# 中的复选框列表中添加文本框?

json - 如何从 HTTP 请求中选择 soapui 属性传输中的 json 值?

c# - 在 asp.net 页面和页面创建的后台线程之间共享变量

php - 如何在 php 中访问名为变量(点符号)的深层对象属性?

reactjs - 在非弹出的 create-react-app 中覆盖 eslint 设置?

控制台应用程序的 C# 箭头键输入

c# - 在 directx 11 中渲染 h264 视频帧