李超

cc编程笔记本。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
今天网易学院看到一篇介绍c#中多态性的文章,作者满嘴漏风的说:使用override来重载基类中的virtual函数,FT,看来这个老大是知道怎么回事,但是用词错误了,假如让新手看到,不把人家搞晕才怪呢。

重载Is overload  not override

在C#中,所谓的重载就是同一个类中不同签名的同名方法。当然调用时编译器会根据实参列表自动选择匹配形参列表的方法。 上面的那篇文章应该是指覆写。


覆写 is override

覆写这个概念只存在于继承关系的两个类中,基类的方法是virtual关键字标示的虚方法,子类是该虚方法的同名方法,使用了override关键字进行了覆写。
覆写override的关键意义在于,在使用父类的对象引用来引用子类的对象时,调用该同名方法,编译器会自动调用子类中的方法,而不是调用父类的方法。


覆盖 is new

假如父类中的方法并不是virtual的,子类中的方法也就无法使用override关键字进行覆写,而使用new关键字对父类中的方法进行覆盖,覆盖后,父类的对象引用来引用子类的对象时,进行调用该同名方法,会调用父类的方法,虽然实际上引用的是子类的对象。




看懂我下面的代码  我觉得你就理解了
下面是示例代码:

using System;
using System.Collections.Generic;
using System.Text;

namespace Hello
{
    
interface IHello
    
{
        
void sayHello();
    }

    
class Hello : IHello
    
{
        
public virtual void sayHello()
        
{
            Console.WriteLine(
"Hello!");
        }

    }

    
class HelloLee : Hello
    
{
        
public override void sayHello()
        
{
            Console.WriteLine(
"Hello Lee!");
        }

    }

    
class HelloCoderLee : HelloLee
    
{
        
public new void sayHello()
        
{
            Console.WriteLine(
"Hello CoderLee!");
        }

    }

    
class Program
    
{
        
static void Main(string[] args)
        
{
            IHello sayHello;
            sayHello 
= new HelloCoderLee();
            sayHello.sayHello();
            Console.ReadLine();
        }

    }

}

posted on 2006-11-01 09:36  coderlee  阅读(719)  评论(0编辑  收藏  举报