Tony.Y

Efforts to learn English and more about program.

 

学习日志-virtual,override,new,overload

学一点记一点,免得忘记..

 

Father

代码
class Father
    {
        
/// <summary>
        
/// 虚方法可以被派生重写
        
/// 其实就是父亲告诉儿子,这项技能你可以学,但是学了就需要有自己的“创新(override or new)”
        
/// </summary>
        public virtual void virtualMethod()
        {
            Console.WriteLine(
"Father Virtual Method");
        }

        
/// <summary>
        
/// 如果在派生类中有同名方法,可以拿new关键字,隐藏父类方法,当然new也可以用于实例化类
        
/// 其实可以理解为儿子学会了和父亲“类似”的技能,比如父亲唱通俗哥,儿子唱流行歌
        
/// </summary>
        public void newMethod()
        {
            Console.WriteLine(
"Father New Method");
        }

        
/// <summary>
        
/// 派生类不能继承
        
/// 其实可以理解为父亲不希望儿子学会的,比如父亲抢劫,不希望儿子学会...
        
/// </summary>
        private void privateMethod()
        {
            Console.WriteLine(
"Father Private Method");
        }

        
/// <summary>
        
/// 派生类可以继承
        
/// 其实可以理解为父亲遗传给儿子的技能
        
/// </summary>
        public void publicMethod()
        {
            Console.WriteLine(
"Father Public Method");
        }

        
/// <summary>
        
/// publicMethod的重载
        
/// 重载:同名不同参
        
/// 也是父亲遗传给儿子的技能
        
/// </summary>
        public void publicMethod(string message)
        {
            Console.WriteLine(
"Father Public Method" + message);
        }
    }

 

 

Son

代码
class Son : Father
    {

        
/// <summary>
        
/// 重写基类的虚方法
        
/// 其实可以理解为儿子学会了父亲的技能,并且有了自主知识产权
        
/// </summary>
        public override void virtualMethod()
        {
            Console.WriteLine(
"Son Virtual Method");
        }
        
/// <summary>
        
/// 隐藏父类的重名方法
        
/// 其实可以理解为儿子学会了父亲的技能,并且有了自主知识产权
        
/// </summary>
        public new void newMethod()
        {
            Console.WriteLine(
"Son New Method");
        }

    }

 

 

Main

代码
class Program
    {
        
static void Main(string[] args)
        {
            Son son 
= new Son();
            son.virtualMethod();
            son.newMethod();
            son.publicMethod();
            Console.WriteLine();

            Father father 
= new Father();
            father.virtualMethod();
            father.newMethod();
            father.publicMethod();
            Console.WriteLine();

            Father father_son 
= new Son();
            father_son.virtualMethod();
//override完全重写的基类的方法
            father_son.newMethod();//new仅仅是隐藏了,当出现上转型对象时,还是调用父亲的方法
            father_son.publicMethod();
        }
    }

 

 

输出

Son Virtual Method

Son New Method

Father Public Method

 

Father Virtual Method

Father New Method

Father Public Method

 

Son Virtual Method

Father New Method

Father Public Method

 

posted on 2010-06-20 14:32  Tony.Y  阅读(227)  评论(0编辑  收藏  举报

导航