已有57人关注
新手菜鸟问题。 关于覆盖类成员问题。
发表在C#图书答疑 2012-08-27
是否精华
版块置顶:
关于 覆盖类成员的问题,
 假设A函数是虚函数,没有被覆盖;
B函数为虚函数,被覆盖了之后,但是需要什么条件才能访问B函数(虚函数)的?

我读了这个本书 搞不明白,按照我的思路来算顺序问题,   那个覆盖类成员的如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _3_3_4
{
    public enum xingbie
    {
        female=0,
        male=1
    }
    public class a
    {
        public a()
        {
            this.name1 = "默认姓名";
            this.age1 = 20;
            this.gender = xingbie.male;
        }
        protected String name1;
        protected int age1;
        protected xingbie gender;
        public virtual void b()
        {
            System.Console.WriteLine("xingbie.b()");
        }
    }
    public class zhongwen : a
    {
        public zhongwen()
            : base()
        {
            this.name1 = "默认中文名";
        }
        public new void b()
        {
            System.Console.WriteLine("zhongwen.b()");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            a c = new zhongwen();
            c.b();
            zhongwen d = new zhongwen();
            d.b();
        }
    }
}

 运行输出下:
xingbie.b()
zhongwen.b()
这个问题的是 :在a类型变量c变量指向zhongwen对象,但不能访问zhongwen函数;  而d本身就是zhongwen对象,但他为什么能正常访问这zhongwen函数?  但我搞不懂的是。。。因为zhongwen函数已经覆盖了a函数,  而且不能访问zhongwen函数,所以到调用a函数来进行实现。对吧?  可是首先zhongwen函数已经覆盖了a函数,应该输出第一行为zhongwen.b()啊? 怎么变成xingbie.b()?
顺序怎么优先的 ?
分享到:
精彩评论 1
小科_mrkj
学分:43 LV2
2012-08-31
沙发
读者朋友:
    您好,在zhongwen类中,你是使用new关键字重新创建了一个b方法,所以在使用c对象调用的时候,还是调用的父类中的方法,如果在zhongwen类中使用override关键字覆写虚方法b,则使用c对象调用时,就调用的是覆写之后的方法。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照