您的位置:首页 > 编程语言 > C#

C# virtual, base, override

2015-11-29 15:58 537 查看
先看这样一段代码:

namespace @virtual
{
class A
{
public void print()
{
Console.WriteLine("base");
}
}
class a :A{
public void print()
{
Console.WriteLine("derive");
}
}
class Program
{
static void Main(string[] args)
{
A p = new A();
p.print();
p = new a();
p.print();
Console.ReadKey();
}
}
}
output:
base
base

p调用了基类的同名方法,如果想使用子类的print()需要用virtual修饰基类的print()再在子类中override重写print(),那样才能调用派生类的方法

namespace @virtual
{
class A
{
public virtual void print()
{
Console.WriteLine("base");
}
}
class a :A{
public override void print()
{
Console.WriteLine("derive");
}
}
class Program
{
static void Main(string[] args)
{
A p = new A();
p.print();
p = new a();
p.print();
Console.ReadKey();
}
}
}

output:

base
derive

它达到的效果和下面的代码是一样的:

namespace @virtual
{
class A
{
public void print()
{
Console.WriteLine("base");
}
}
class a :A{
public void print()
{
Console.WriteLine("derive");
}
}
class Program
{
static void Main(string[] args)
{
A p = new A();
p.print();
a p1 = new a();
p1.print();
Console.ReadKey();
}
}
}

output:

base

derive

base则是对在派生类里对基类成员的访问。在基类数据成员或方法被子类同名成员隐藏的情况下,它能发挥巨大的作用。

namespace @base
{
class A
{
public void print()
{
Console.WriteLine("base");
}
}
class a :A{
public void print()
{
Console.WriteLine("derive");
}
public void fatherPrint()
{
base.print();
}
}
class Program
{
static void Main(string[] args)
{
a p1 = new a();
p1.fatherPrint();
p1.print();
Console.ReadKey();
}
}
}
output:

base
derive
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: