Virtual关键字
来源:互联网 发布:淘宝黑莓手机是真的吗 编辑:程序博客网 时间:2024/05/29 14:25
virtual(C# )
virtual
关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 例如,此方法可被任何继承它的类重写。
public virtual double Area() { return x * y; }
备注:
virtual
关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 例如,此方法可被任何继承它的类重写。
public virtual double Area() { return x * y; }
调用虚方法时,将为重写成员检查该对象的运行时类型。 将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。
默认情况下,方法是非虚拟的。 不能重写非虚方法。
virtual
修饰符不能与 static
、abstract, private
或 override
修饰符一起使用。 下面的示例演示一个虚拟属性:
C#
class MyBaseClass { // virtual auto-implemented property. Overrides can only // provide specialized behavior if they implement get and set accessors. public virtual string Name { get; set; } // ordinary virtual property with backing field private int num; public virtual int Number { get { return num; } set { num = value; } } } class MyDerivedClass : MyBaseClass { private string name; // Override auto-implemented property with ordinary property // to provide specialized accessor behavior. public override string Name { get { return name; } set { if (value != String.Empty) { name = value; } else { name = "Unknown"; } } } }
除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。
在静态属性上使用
virtual
修饰符是错误的。通过包括使用
override
修饰符的属性声明,可在派生类中重写虚拟继承属性。
示例
在该示例中,Shape
类包含 x
、y
两个坐标和 Area()
虚方法。 不同的形状类,如 Circle
、Cylinder
和 Sphere
继承 Shape
类,并为每个图形计算表面积。 每个派生类都有各自的 Area()
重写实现。
通知继承的类 Circle
、 Sphere
和 Cylinder
初始化基类的所有使用构造函数,如以下声明所示。
public Cylinder(double r, double h): base(r, h) {}
下面的过程通过调用 Area()
方法的适当实现计算并显示由每个图形的合适区域,根据与该方法的对象。
C#
class TestClass { public class Shape { public const double PI = Math.PI; protected double x, y; public Shape() { } public Shape(double x, double y) { this.x = x; this.y = y; } public virtual double Area() { return x * y; } } public class Circle : Shape { public Circle(double r) : base(r, 0) { } public override double Area() { return PI * x * x; } } class Sphere : Shape { public Sphere(double r) : base(r, 0) { } public override double Area() { return 4 * PI * x * x; } } class Cylinder : Shape { 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; Shape c = new Circle(r); Shape s = new Sphere(r); Shape 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()); } } /* Output: Area of Circle = 28.27 Area of Sphere = 113.10 Area of Cylinder = 150.80 */
0 0
- virtual 关键字
- virtual 关键字
- virtual 关键字
- virtual 关键字
- virtual 关键字
- Virtual关键字
- virtual关键字
- virtual关键字
- Virtual关键字
- virtual关键字
- C++ virtual 关键字详解
- C++ virtual关键字理解
- C# 关键字--virtual
- virtual关键字用法总结
- C#的Virtual关键字
- C++ virtual关键字理解
- C# 关键字--virtual
- C# 关键字--virtual
- Android MediaPlayer和VideoView的使用
- ios7之后导航栏的问题1
- jdbcTemplate的简单使用
- Lightoj 1067【逆元模板(求C(N,M))】
- Android Image开源框架之ImageLoader(二)
- Virtual关键字
- C/C++的64位整型 不同编译器间的比较
- 对URL URI URN的思考
- 并发设计模式之Master-Worker模式
- Android EventBus源码解析 带你深入理解EventBus(转载)
- 关于pt、px、em的转换
- 3342 数据结构实验之二叉树三:统计叶子数
- 51nod-【1393 0和1相等串】
- phpstorm一些常见的快捷键