本文介绍了没有得到继承的概念的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 1。为什么我无法访问S类方法。 2.为什么我能在M级创建同名的方法 public class S { 公开 S() {} public int myFunc( int a, int b) { return a + b; } } public class M: S { public M() {} public string myFunc( int a, int b) { return (a + b).ToString(); } } public class 测试 { public static void Main ( string [] args) { M mm = new M() ; mm.myFunc( 1 , 2 ); // 为什么我无法访问S class myFunc } } 解决方案 你实际上可以。 因为,通过非常继承的概念, M 是 S ,你可以打电话。 然而, M :: myFunc 隐藏 S :: myFunc ,所以你需要一个解决方法,例如: int k =(mm as S).myFunc( 1 , 2 ); 因为编译器(不情愿地:-))允许这样做。但是,如果实际上是你的意图阴影,那么你最好使用 new 通知(如已经建议的)编译器本身。 首先,如果在父类和子类中都有相同签名的方法,则必须使用new关键字。您无法访问S myFucntion,因为当您实例化像 M mm = new M(); 这意味着你指的是M类,如果在父类和子类中都有相同签名的方法,那么它取决于你创建的是哪个对象?将您的代码更改为 S mm = new S(); 你可以调用s myFunc。 1. Why I am not able to access S class method.2. And why am I able to create the method with the same name in class Mpublic class S { public S() { } public int myFunc(int a, int b) { return a + b; } } public class M:S { public M() { } public string myFunc(int a, int b) { return (a + b).ToString(); } } public class Test { public static void Main(string[] args) { M mm = new M(); mm.myFunc(1,2); // Why I am not able to access S class myFunc } } 解决方案 You actually can.Since, by the very inheritance concept, M is S, you may call it.However, M::myFunc hides S::myFunc, so you need a workaround, e.g.:int k = (mm as S).myFunc(1,2);Because the compiler (reluctantly :-) ) allows that. However, if shadowing the method is really your intention, then you'd better inform (as already suggested) the compiler itself using new. 这篇关于没有得到继承的概念的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 08-22 18:42