永发信息网

C#中的virtual和override的用法

答案:2  悬赏:20  手机版
解决时间 2021-02-05 09:47
  • 提问者网友:愿为果
  • 2021-02-04 17:34
有这样的片段:
public class Ellipse : Shape
{
protected int semiMajorAxis, semiMinorAxis;

public virtual int SemiMajorAxis
{
get
{
return semiMajorAxis;
}
set
{
semiMajorAxis = value;
}
}

public virtual int SemiMinorAxis
{
get
{
return semiMinorAxis;
}
set
{
semiMinorAxis = value;
}
}

public override double Area //椭圆面积公式:S = pi*a*b
{
get
{
return Math.PI * iMajorAxis * SemiMinorAxis;
}
}
这里面有virtual和override,是什么意思?为什么要用在这儿?书上的我看不太懂,请讲解一下,谢了。
最佳答案
  • 五星知识达人网友:底特律间谍
  • 2021-02-04 18:01
overrride表示重写 这个类是继承于Shape类
<br>public override double Area 这个属性再shape中肯定存在 但是这里我们不想用shape中的 所以要重写
virtual是告诉其它想继承于他的类 你可以重写我的这个方法或属性,否则不允许。
给你一个生动的例子 老爸表示基类(被继承的类) 儿子表示子类(继承的类)

老爸用virtual告诉儿子:"孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的"

儿子用override告诉全世界:"这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的"
全部回答
  • 1楼网友:长青诗
  • 2021-02-04 19:36
子类函数覆盖父类函数的方法总结: (1)不使用任何修饰符 在不使用任何修饰符的情况下,可以实现覆盖,但是会有警告。 (2)使用new new用在子类重写父类的函数前,此时覆盖可以正常完成,但是具体调用父类的函数还是调用子类的函数,要看对象的类型。示例程序如下: namespace demo { class Person { private string name; private int age; public string Name { set { name = value; } get { return name; } } public int Age { set { age = value; } get { return age; } } public void show() { Console.WriteLine("姓名:{0},年龄:{1}", name, age); } static void Main(string[] args) { Person per = new Person("张三丰", 24); per.show(); //Person stu = new Student();//此时调用父类中的show方法 //Student stu = new Student();//此时调用子类中的show方法 stu.Department = "计算机"; stu.show(); } } class Student:Person { string department; public string Department { set { department = value; } get { return department; } } public new void show() { Console.WriteLine("系别:" + department); } } } (3)使用virtual,new或override virtual用在父类的要被重写的函数前,new或override用在子类的重写父类的函数前。示例程序如下: namespace demo { class Person { private string name; private int age; public string Name { set { name = value; } get { return name; } } public int Age { set { age = value; } get { return age; } } public virtual void show() { Console.WriteLine("姓名:{0},年龄:{1}", name, age); } static void Main(string[] args) { Person per = new Person("张三丰", 24); per.show(); //Person stu = new Student();//此时调用子类中的show方法 //Student stu = new Student();//此时调用子类中的show方法 stu.Department = "计算机"; stu.show(); } } class Student:Person { string department; public string Department { set { department = value; } get { return department; } } public new void show() //new也可以是用virtual。new时,调用父类show();override时,调用子类show() { Console.WriteLine("系别:" + department); } } (4)总结如下 virtual函数允许子类函数重写该函数,override无论子类的实例是父类类型还是子类类型,子类的实例都会调用子类中重写的函数。new子类实例是子类类型,则调用子类中的重写函数;子类实例是父类类型,则调用父类中的重写函数。 父类中没有virtual修饰的函数也可以被子类中的new函数重写,但是此时子类的实例若是父类类型,调用的函数是父类的函数
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯