首页 / 知识
关于C#:是否有一种方法可以防止方法在子类中被覆盖?
2023-04-12 14:23:00

Is there a way to prevent a method from being overridden in subclasses?有人知道C语言中的语言功能或技术可以防止子类过度使用父类中的特定方法吗?
即使它不是虚拟的,也仍然允许这样做(至少在我正在使用的Metrowerks编译器中),您得到的只是关于隐藏非虚拟继承函数X的编译时警告。 当您可以将
适用于您的示例,如下所示:
编译时:
使用Microsoft编译器时,还请查看 一些想法: 除此之外,我不知道一种语言功能会以某种方式锁定您的函数,从而防止它被重载并仍然可以通过指向子类的指针/引用来调用。 > 祝你好运! 听起来像您正在寻找的声音等同于Java语言的final关键字,该关键字防止方法被子类覆盖。 正如这里的其他人所建议的那样,您真的无法避免。同样,这似乎是一个相当常见的问题。 为澄清起见,你们中的大多数人都误解了他的问题。他不是在问"重写"方法,而是在问是否有防止"隐藏"的方法。简单的答案是"没有!"。 这又是他的榜样 父类定义一个函数:
继承父级的子类定义了相同的函数AGAIN(不可覆盖):
您可以在所有编程语言上执行此操作。没有什么可以阻止此代码编译的(编译器上的设置除外)。最好的结果是警告您隐藏了父级的方法。如果调用子类并调用foo方法,将得到2。实际上已经破坏了代码。 这是他的要求。 (a)我不认为使函数私有是解决方案,因为这只会对派生类隐藏基类函数。派生类可以始终定义具有相同签名的新函数。 我不认为有这样做的方法。此外,我想知道您决定禁止派生类覆盖基类函数的原因。 我正在搜索相同的内容,昨天又遇到了这个[较旧的]问题。 今天我找到了一个整洁的c 11关键字: http://en.cppreference.com/w/cpp/language/final 我猜编译器警告您的东西正在隐藏!它实际上被覆盖了吗? 编译器可能会警告您,但是在运行时,如果指针的类型为父类,则将调用父类方法,而不管其指向的对象的实际类型如何。 这很有趣。尝试为您的编译器制作一个小的独立测试程序。
更改编译器设置,使其变为错误而不是警告。 从技术上讲,您可以防止虚拟函数被覆盖。但是您将永远无法更改或添加更多内容。那无济于事。最好按常见问题Lite建议在函数前使用注释。 在您的示例中,没有函数被覆盖。相反,它是隐藏的(这是过载的一种退化情况)。 试图防止某人在子类中使用与您的函数相同的名称与尝试防止某人使用与您在链接库中声明的相同的全局函数名称没有太大不同。 您只能希望那些打算使用您的代码的用户,而不是其他人,会小心他们如何引用您的代码,并希望他们使用正确的指针类型或使用完全限定的范围。 除非您将方法设为虚拟,否则子类无法覆盖它。如果要防止子类调用它,请将其设为私有。 因此默认情况下,C会执行您想要的操作。 如果将子类作为其父类的类型来寻址,则非虚函数将调用父类的版本。 即:
C方法是私有的,默认情况下不可覆盖。
您可能是指超载吗? |
最新内容
相关内容
python有map方法吗
python有map方法吗,培训,位置,数据,函数,列表,序列,参数,元素,方法,使用方法,python中的map:map()会根据提供的函数对指定序列做映射。第一个pythonc语言取余和python取余的区
pythonc语言取余和python取余的区别,培训,资料,语言,负数,区别,被除数,符号,除数,规定,余数,今天看书发现python与C的负数取余运算结果不同,pythonPython和r语言的区别
pythonPython和r语言的区别,数据,分析,流程,培训,工具,系统,服务,平台,代码,语言,Python与R语言的共同特点1.Python和R在数据分析和数据挖掘pythonpython是函数式语言吗
pythonpython是函数式语言吗,培训,代码,函数,概念,指数,状态,语言,变量,计算机,程度,函数是Python内建支持的一种封装,我们通过把大段代码拆成python有哪些方法可以解压文件?
python有哪些方法可以解压文件?,工具,系统,工作,培训,文件,文件夹,方法,窗体,不同于,以下内容,在Python学习和日常使用中,很容易造成文件过大。python函数与方法的区别是什么
python函数与方法的区别是什么,培训,函数,方法,区别,对象,以上,方式,更多,内容,python中函数和方法的区别1、函数要手动传self,方法不用传selpython为什么叫胶水语言
python为什么叫胶水语言,标准,代码,培训,数据,一致,环境,周期性,软件,服务,胶水,什么是胶水语言?胶水语言(gluelanguage)是用来连接软件组件python字符串切片的方法是什么
python字符串切片的方法是什么,培训,字符串,索引,切片,开头,方括号,时候,方法,冒号,首尾,获取Python字符串中的某字符可以使用索引:lang=pythopython子类怎么调用父类方法
python子类怎么调用父类方法,培训,代码,初始化,方法,函数,示例,时调,定义,对象,以上,python中类的初始化方法是__init__(),因此父类子类的初始python类自带方法吗
python类自带方法吗,培训,方法,里面,实例,也就是说,下面,对象,以上,之后,参数,python中的类,创建好之后,里面是没有方法的,也就是说,类并没有自带python子类可以调用父类方法吗
python子类可以调用父类方法吗,培训,名称,资料,情况,地方,函数,参数,方法,表示,语句,python中的子类中的__init__()函数会覆盖父类的函数,一些python静态方法怎么使用self
python静态方法怎么使用self,培训,管理,不了,方法,静态,属性,实例,变量,对象,参数,python-静态方法,类方法,属性方法静态方法实际上与类(或者实