继承-是否可以覆盖内部方法?是否可以覆盖内部方法的行为?使用系统;classTestClass{publicstringName{get{returnthis.ProtectedMethod();}}受保护的字符串ProtectedMethod(){returnInternalMethod();}stringInternalMethod(){返回“TestClass::InternalMethod()”;classOverrideClassProgram:TestClass{//尝试覆盖内部方法?(不起作用)stringInternalMethod(){return"OverrideClassProgram::InternalMethod()";}staticintMain(string[]args){//TestClass::InternalMethod()Console.WriteLine(newTestClass().Name);//测试类::内部方法()??我们只是搞砸了吗?Console.WriteLine(newOverrideClassProgram().Name);返回(int)Console.ReadKey().Key;我觉得你在这里有点困惑。有一个实际的关键字“内部”,这是您想要的吗?内部字符串InternalMethod(){返回“TestClass::InternalMethod()”;但我认为你真正想要的是“虚拟”关键字。这允许您执行覆盖:父类保护的虚拟字符串InternalMethod(){return"TestClass::InternalMethod()";}子类保护覆盖字符串InternalMethod(){return"TestProgram::InternalMethod()";}使用“new”关键字是有效的,但它完全重新实现了该方法。即它打破了多态性。编辑:这是一个链接。在Java中,一切都是虚拟的,除非是静态的/最终的。在C#中,您必须显式地将实例方法声明为虚拟方法,然后该方法不能是私有的。本文解释了原因。默认情况下,一个类的所有成员都是私有的,因此如果您不提供访问修饰符(当然不是私有的),您示例中的InternalMethod()方法是私有的并且不能是虚拟的,因此它不能被覆盖。您必须更改它的访问修饰符并将其标记为虚拟,并且在子类中您必须覆盖它以使代码按您想要的方式工作。这可能不能回答你的问题,只是加一分钱。内部意味着只能在同一程序集中的文件中访问该类型或成员。他们是集会的公众,但实际上他们的访问量略低于公众。MSDN访问修饰符,内部访问的一个常见用途是在基于组件的开发中,因为它使一组组件能够以私有方式协作,而不会暴露给其他应用程序代码。例如,用于构建图形用户界面的框架可以提供Control和Form类,它们使用具有内部访问权限的成员进行协作。由于这些成员是内部成员,因此不会暴露给使用框架的代码。尝试使用override关键字...new关键字正在调用类构造函数。当然,这是可能的,但为了重写一个方法,该方法需要是virtual或abstract,与任何其他可见性相同。ClassBase{internalvirtualvoidFoo(){Console.WriteLine("FoofromBase");}}classDerived:Base{内部覆盖voidFoo(){Console.WriteLine("FoofromDerived");当你使用new关键字时,它被称为方法隐藏,这不是一回事。如果我这样写:classBase{internalvoidFoo(){Console.WriteLine("FoofromBase");}}classDerived:Base{internalnewvoidFoo(){Console.WriteLine("FoofromDerived");}}staticvoidMain(){Baseb=newDerived();b.Foo();然后它将执行BaseFoo方法而不是Derived。换句话说,它将从Base打印Foo。在第一种情况下,它仍然执行Derived方法并且FoofromDerived打印FoofromDerived。以上就是C#学习教程:InheritanceinC#Question-Isitpossibletooverrideinternalmethods?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
