>> 其他对象语言默认都是可以多态
C++就不是这样,而且多态是牺牲时间/空间性能换取灵活性的,其决定权应该在组件设计者的手里,而不是系统不分青红皂白的一律设置成可以覆盖。而且所有的方法都是virtual对系统的安全特性也不好。
至于什么时候应该是用virtual,那是Design Pattern的课题,不是语言设计。单就多态特性来说,C#就更贴近C++而不是Java,除了加了override, new关键字来避免C++里面可能出现的问题之外,就功能来说基本上和C++是相同的。

解决方案 »

  1.   

    其他对象语言默认都是可以多态????是真的吗,那种语言?
    《C# Essentials》 p47有个例子,正合你胃口。
      

  2.   

    java里的函数默认下是virtual的,但c++,c#不是。多态是以牺牲性能为代价的。
      

  3.   

    1,child 中new好像是可以加,可以不加,都可以编译成功,只有一个警告
    ----------------------------
    当没有加new时,系统会给出一个警告,然后系统会当作加了new来处理,也就是会隐藏base class的同名方法(当然,参数也相同)。
    2,如果 father里面不用virtual public void test(),则child里面无论怎么
    搞,都不能实现多态,因为 father f=new child(); f.test();都是调用了
    father中的方法,而不是child的.所以要实现多态,比如father里面用了virtual
    child里面用override才可以,也就是说,如果father不想你这样作,child是没有办法多态的
    -----------------------------------------------------
    这就是.Net内置的versioning控制了,3, 其他对象语言默认都是可以多态,也就是子类可以覆盖父类中的方法,
    为什么c#要默认不可以这样,c#这样设定有什么好处吗?不了解
    ------------------------------------------------------
    好处有好多的
    1。多态是用时间换取的,通过只让明确声明的方法可以多态,可提高运行速度。
    2。通过明确的告诉编译器你想做什么,可减少不必要的逻辑错误。大部分方法展现出来只是给使用,而不是给override。一旦override很可能引起base class错误。
    3。...还有一些,我不知道怎么说,那位大虾补充一下!