c#中virtual和overwrite

class A
{
public void Print()
{
}
}

class B : A
{
public void Print()
{
base.print();
//其他代码
}
}
这个不加virtual和overwrite也能成功的 why?
那什么是重写?能给个例子么

子类的方法覆盖了原来基类的方法了
不是重写,不用加你说的那两个
重写就是重写虚方法

using System;
class TestClass
{
public class Dimensions
{
public const double PI = Math.PI;
protected double x, y;
public Dimensions()
{
}
public Dimensions(double x, double y)
{
this.x = x;
this.y = y;
}

public virtual double Area()//这个就是虚方法方法可被任何继承它的类重写。

{
return x * y;
}
}

public class Circle : Dimensions
{
public Circle(double r) : base(r, 0)
{
}

public override double Area()//这个就是重写的
{
return PI * x * x;
}
}

class Sphere : Dimensions
{
public Sphere(double r) : base(r, 0)
{
}

public override double Area()//这个就是重写的
{
return 4 * PI * x * x;
}
}

class Cylinder : Dimensions
{
public Cylinder(double r, double h) : base(r, h)
{
}

public override double Area()//这个就是重写的
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}

static void Main()
{
double r = 3.0, h = 5.0;
Dimensions c = new Circle(r);
Dimensions s = new Sphere(r);
Dimensions l = new Cylinder(r, h);
// Display results:
Console.WriteLine("Area of Circle = {0:F2}", c.Area());
Console.WriteLine("Area of Sphere = {0:F2}", s.Area());
Console.WriteLine("Area of Cylinder = {0:F2}", l.Area());
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-25
这里B类的Print 其实少了一个关键字new
正确应该是new public void Print()

意思是我是新的Print 不是从父亲那儿来了。虽然是和父亲同名,换句话说,我不去继承父亲Print方法。(比喻,如果Print是个抽烟的方法,我不去继承)。

而virtual 和 override 是说,父亲有一个Print(抽烟方法),并且这个方法可以由儿子去改进,去改动。(比喻,你父亲一天抽三包烟),儿子继承后觉得多了。我就可以去改动 override 改天一天抽一包烟。

我想区别就是,一个是不管三七二十一就直接来一个新的,一个是必须由你父亲决定是否 允许 儿子 去改动。就这个区别