回 帖 发 新 帖 刷新版面

主题:[讨论]一个C#的精典问题

各位,在C#中有这样一个问题:
using System;

namespace ConsoleApplication3
{
    class Person
    {
        public Person()
        {
            classType="Person";
        }
        public virtual void g()
        {
            Console.WriteLine("这是person");
        }
        public void k()
        {
            Console.WriteLine("P.K");
        }
        public string classType;
    }
    class Manager:Person
                    {
        public Manager()
        {
            classType="Manager";
        }
        public override void g()
        {            
            Console.WriteLine("这是Manager");
        }
        new public void k()
        {
            Console.WriteLine("M.k");
        }

        new public  string classType;
    }
    class Pd
    {
        
        public static void Main()
        {
            //Person p=new Person();
            Person m=new Manager();
            //showtype(p);
            //showtype(m);
            //m.g();
            m.k();
            m.g();
            Console.WriteLine (m.classType);
            
        }
    }
}
为什么输出的是 “P.K"和”这是Manager"
而 不是"M.K"和“这是Manager"
new public void k()和public override void g()有什么区别呀。

回复列表 (共2个回复)

沙发

override 跟 不override 主要在使用多态时有区别多态
如果你
Person pm = new Manager()
pm.k();
pm.g();

不override的k方法就会调用Person.k
而override的g方法就会调用Manager.g()

板凳

new 定義成員只是起到應藏基類的作用,基類執行代碼還在,
所以執行的是基類的方法.
override是重寫了基類的執行代碼

我来回复

您尚未登录,请登录后再回复。点此登录或注册