C#小白问题,什么是掩盖基类成员、什么是虚拟方法

fxluntan 2015-08-03 04:05:01
虚拟方法是不是就是重写方法?
可是我不用关键字virtual 和 override 也能重写方法啊.


我记得Java重写方法的时候 没有这两个关键字,C#毛病太多了。
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcjSharp 2015-08-03
  • 打赏
  • 举报
回复
标识为virtual和abstract的方法可以在子类中进行重写(override)
  • 打赏
  • 举报
回复
当然我也见过别人写的Java抽象类中,竟然没有任何抽象成员 就是那种只有字段没有方法的类,呵呵
  • 打赏
  • 举报
回复
谁跟你讲的Java没有override,你不会连接口或者抽象类都没写过吧 当然我也见过别人写的Java抽象类中,竟然没有任何抽象成员 在面向对象语法规则上,Java还真是没得比,连委托都没有,还得自己写接口 当然Java也有他的优势,这个就不多说了,不然又变月经贴 只是希望对事尽量客观
於黾 2015-08-03
  • 打赏
  • 举报
回复
如果你编程中根本就是为了继承而继承,为了重写而重写 你就根本不应该继承
Poopaye 2015-08-03
  • 打赏
  • 举报
回复
另外,Java从5开始增加了@Override来帮助检查重写是否正确,意味着其开发者也意识到了这个问题
sunny906 2015-08-03
  • 打赏
  • 举报
回复

class A
    {
        public void N() 
        {
             Console.WriteLine("A:N");
        }
        public virtual void S() //定义虚方法,子类override;如果不定义为虚方法,则子类new
        { 
              Console.WriteLine("A:S"); 
         } 
    }
class B:A
    {
        public new void N() //覆盖父类方法
        {
             Console.WriteLine("B:N");
        }
        public override void S()
        { 
              Console.WriteLine("B:S"); 
         }
    }
Poopaye 2015-08-03
  • 打赏
  • 举报
回复
这是C#进步的地方,Java里不使用override,你只看子类,如果没有出现super这个关键词,就无法判断某个方法是否是重写方法还是子类特有的。
Scipio 2015-08-03
  • 打赏
  • 举报
回复
virtual 是虚方法,子类通过声明 override 方法实现多态,这样声明的基类对象在指向子类时可以调用子类方法。直接声明同名方法是隐藏基类方法,无法实现多态,只能调用所声明的对象的方法。你连基本的面向对象的概念都没有搞清楚,就可以说C#毛病太多了?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧