当前位置: 首页 > 编程语言 > C#

为什么一个属性会隐藏一个同名的Inherited函数?分享

时间:2023-04-10 15:37:22 C#

为什么一个属性会隐藏一个同名的Inherited函数?我有一个包含函数myName的Foo类。类bar继承自Foo并且有一个属性也称为myName我认为这应该没问题,因为:该属性将编译为get_myName()(因此它不会与Foo::myName(int,int)冲突)Foo::myName有参数,显然,属性没有(同样,没有冲突)。但是我仍然收到警告:“Bar.myName”隐藏了继承的成员“Foo.myName(int,int)”。如果打算隐藏,请使用new关键字。示例代码:publicclassFoo{publicintmyName(inta,intb){return0;}}酒吧类:Foo{inta;诠释乙;intmyName{得到{返回a+b;}}}另外,如果我添加barfunction:intget_myName(){returna+b;正如预期的那样,我收到有关先前声明的函数的错误。那么这是怎么回事?该属性是否允许我使用除get_myName()之外的所有myName重载?C#规范的第10.3.3节写道:派生类可以通过声明具有相同名称或签名的新成员来隐藏成员的继承。它并没有说两个成员都必须是同一类的成员。注意,即使一个property是property,另一个是method,还是有可能混淆:在同一个类中,遇到10.3小节的规则:Asmentionedinget_myName,10.3.9.1小节提到的事实无法声明名为get_myName的方法。我们甚至不需要图片中的继承-您不能在属性和方法之间进行“重载”:classProgram{staticvoidMain(string[]args){}voidDoStuff(inti,intj){}intDoStuff{get{return10;}}}Production:ErrorCS0102:Type'ConsoleApplication4.Program'alreadycontainsadefinitionfor'DoStuff'以上是C#学习教程:WhydopropertieshideInheritedfunctionswithsamename?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: