标题: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-332637-1-1.html




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

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