| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 733 人关注过本帖
标题:4个程序看C#中隐藏与覆盖的区别
只看楼主 加入收藏
观星
Rank: 2
等 级:论坛游民
帖 子:77
专家分:45
注 册:2008-5-1
结帖率:90.91%
收藏
 问题点数:0 回复次数:1 
4个程序看C#中隐藏与覆盖的区别
刚刚学习C#,书才看了两章,发点东西,高手勿笑

override 和 new 对继承的效果
program 1:
程序代码:
using System;
class A
{
    private int version=3;
    public  void output()
    {
        Console.WriteLine("A:"+version);
    }
}

class B:A
{
    private int version=4;
    public void output()
    {
        Console.WriteLine("B:"+version);
    }
}

class test
{
    static void Main()
    {
        A a1=new A();
        A a2=new B();
        B b2=new B();
       
        a1.output();
        a2.output();
        b2.output();
    }
}

program 1 执行结果:
编译有警告:
jctest.cs(14,14): warning CS0108: 'B.output()' hides inherited member
        'A.output()'. Use the new keyword if hiding was intended.
jctest.cs(5,15): (Location of symbol related to previous warning)
因为,B隐藏了A的方法,但是没有用 new 显示的声明隐藏。
执行结果:
A:3
A:3
B:4

program 2:

程序代码:
using System;
class A
{
    private int version=3;
    public  void output()
    {
        Console.WriteLine("A:"+version);
    }
}

class B:A
{
    private int version=4;
    public new void output()
    {
        Console.WriteLine("B:"+version);
    }
}

class test
{
    static void Main()
    {
        A a1=new A();
        A a2=new B();
        B b2=new B();
       
        a1.output();
        a2.output();
        b2.output();
    }
}

program 2 执行结果:
编译成功,无警告、无报错。
执行结果:
A:3
A:3
B:4

program 3:

程序代码:
using System;
class A
{
    private int version=3;
    public  void output()
    {
        Console.WriteLine("A:"+version);
    }
}

class B:A
{
    private int version=4;
    public override void output()
    {
        Console.WriteLine("B:"+version);
    }
}

class test
{
    static void Main()
    {
        A a1=new A();
        A a2=new B();
        B b2=new B();
       
        a1.output();
        a2.output();
        b2.output();
    }
}
编译报错:覆盖的函数必须是有virtual或者override修饰的函数。
program 4:

程序代码:
using System;
class A
{
    private int version=3;
    public virtual void output()
    {
        Console.WriteLine("A:"+version);
    }
}

class B:A
{
    private int version=4;
    public override void output()
    {
        Console.WriteLine("B:"+version);
    }
}

class test
{
    static void Main()
    {
        A a1=new A();
        A a2=new B();
        B b2=new B();
       
        a1.output();
        a2.output();
        b2.output();
    }
}
编译成功,无警告、无报错。
执行结果:
A:3
B:4
B:4

[ 本帖最后由 观星 于 2011-2-23 11:48 编辑 ]
搜索更多相关主题的帖子: 东西 version 
2011-02-23 09:21
清河房子
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-2-24
收藏
得分:0 
不错,刚入门,有学到点东西
2011-02-24 22:00
快速回复:4个程序看C#中隐藏与覆盖的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.075189 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved