override (C# 参考)--MSDN

要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。

abstract class ShapesClass
{
    abstract public int Area();
}

class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }

    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main()
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }
}
// Output: Area of the square = 144

override 方法提供从基类继承的成员的新实现。 由 override 声明重写的方法称为重写基方法。 重写的基方法必须与 override 方法具有相同的签名。 有关继承的信息,请参见继承(C# 编程指南)

不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。

override 声明不能更改 virtual 方法的可访问性。 override 方法和 virtual 方法必须具有相同的访问级别修饰符

您不能使用 new、static 或 virtual 修饰符来修改 override 方法。

重写属性声明必须指定与继承属性完全相同的访问修饰符、类型和名称,并且被重写的属性必须是 virtual、abstract 或 override 的。

有关如何使用 override 关键字的更多信息,请参见使用 Override 和 New 关键字进行版本控制(C# 编程指南)了解何时使用 Override 和 New 关键字

此示例定义了一个名为 Employee 的基类和一个名为 SalesEmployee 的派生类。 SalesEmployee 类包括一个额外的属性 salesbonus,并重写方法 CalculatePay 以便将该属性考虑在内。

 1 class TestOverride
 2 {
 3     public class Employee
 4     {
 5         public string name;
 6
 7         // Basepay is defined as protected, so that it may be
 8         // accessed only by this class and derrived classes.
 9         protected decimal basepay;
10
11         // Constructor to set the name and basepay values.
12         public Employee(string name, decimal basepay)
13         {
14             this.name = name;
15             this.basepay = basepay;
16         }
17
18         // Declared virtual so it can be overridden.
19         public virtual decimal CalculatePay()
20         {
21             return basepay;
22         }
23     }
24
25     // Derive a new class from Employee.
26     public class SalesEmployee : Employee
27     {
28         // New field that will affect the base pay.
29         private decimal salesbonus;
30
31         // The constructor calls the base-class version, and
32         // initializes the salesbonus field.
33         public SalesEmployee(string name, decimal basepay,
34                   decimal salesbonus) : base(name, basepay)
35         {
36             this.salesbonus = salesbonus;
37         }
38
39         // Override the CalculatePay method
40         // to take bonus into account.
41         public override decimal CalculatePay()
42         {
43             return basepay + salesbonus;
44         }
45     }
46
47     static void Main()
48     {
49         // Create some new employees.
50         SalesEmployee employee1 = new SalesEmployee("Alice",
51                       1000, 500);
52         Employee employee2 = new Employee("Bob", 1200);
53
54         Console.WriteLine("Employee4 " + employee1.name +
55                   " earned: " + employee1.CalculatePay());
56         Console.WriteLine("Employee4 " + employee2.name +
57                   " earned: " + employee2.CalculatePay());
58     }
59 }
60 /*
61     Output:
62     Employee4 Alice earned: 1500
63     Employee4 Bob earned: 1200
64 */
时间: 2024-10-07 12:34:24

override (C# 参考)--MSDN的相关文章

VS中 DLL的创建及函数导出(参考MSDN)

新建一个DLL工程: 新建 - 项目 - vc++ - win32 - win32控制台应用程序,工程名假设取为 MathFuncsDll 向导中选择DLL,取消预编译头 完成. 此时会有dllmain.cpp, MathFuncsDll.cpp 两个cpp文件及生成的 stdafx.h, targetver.h stdafx.cpp, 后面这三个文件其实是没用的,可以删掉,然后把dllmain.cpp 中的#include "stdafx.h"改成#include <windo

C#继承中abstract、virtual、override和new

abstract 详细参考:https://msdn.microsoft.com/zh-cn/library/sf985hc5.aspx abstract 修饰符指示所修饰的内容缺少实现或未完全实现. abstract 修饰符可用于类.方法.属性.索引器和事件. 在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类. 标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现. 抽象类具有以下特性: - 抽象类不能实例化. - 抽象类可以包含抽象方法和抽象访问器. - 不能

Ogre参考手册(四)3.1.4-3.1.14 声明顶点、几何、片段程序(Ogre着色器脚本)

3.1.4 声明顶点.几何.片段程序 使用着色程序前需要先对其定义,一个程序定义可以用于多个材质,这仅需要在所使用的材质定义之前定义该程序. 程序定义可以内嵌在.material脚本中(需要放在所有引用的材质之前),或者希望可以在多个.material中使用,可以在外部.program脚本中定义.在.material和.program中的定义完全相同,区别仅在于.program文件会在所有.material之前解析,因此可以确保程序定义会先于任何使用它的材质定义. 程序可以是底层的(依据具体规范

pages与页面配置

全局定义页特定配置设置,如配置文件范围内的页和控件的 ASP.NET 指令.能配置当前Web.config目录下的所有页面的设置. <pages buffer="[True|False]" enableEventValidation="[True|False]" enableSessionState="[True|False|ReadOnly]" enableViewState="[True|False]" enable

C++ 11 vlearning

1.新增算术类型     longlong,最小不比long小,一般为64位. 2.列表初始化      int units_sold = {0};或者 int units_sold{0};非11标准下的C++中,只有特定的情况下才能使用该形式.  比如数组的初始化,类构造函数的初始化,结构体的填充.相比传统的赋值初始化,如果右侧的数值类型相对于左侧类型更大的话,侧对于这种窄化现象,编译器会 报错.如:int k = {3.14};一个double是8个字节,int一般是4个字节,这时编译器就会

NHibernate官方文档中文版--基础ORM(Basic O/R Mapping)

映射声明 对象/关系映射在XML文件中配置.mapping文件这样设计是为了使它可读性强并且可修改.mapping语言是以对象为中心,意味着mapping是围绕着持久化类声明来建立的,而不是围绕数据表. 要注意的是,尽管很多NHibernate使用者选择手动定义XML文件,但是仍然有很多工具可以用来生成mapping文件,包括NHibernate.Mapping.Attributes 库和各种各样基于模板的代码生成工具(CodeSmith, MyGeneration). 让我们用一个mappin

可执行程序的入口点在那里?(强化概念:程序真正的入口是mainCRTstartup)

今天终于有时间来研究一下一个很大很大的工程编译成一个exe和若干dll后,程序是如果执行它的第一条指令的?操作系统以什么规则来找到应该执行的第一条指令(或说如何找到第一个入口函数的)? 我们以前写windows程序时,都是先写个main()函数,然后再写自己的逻辑:然后编译,然后点击exe就能运行我们的程序了:如果我们用VS2005工具生成一个非空工程,工程会为我们提供一个int _tmain(int argc, _TCHAR* argv[])或WinMain()函数的入口,然后我们在里面添加程

C#中的继承与多态还有接口

简单继承 最简单的三个类 public class Animal { public Animal() { Debug.Log("Construct Animal!"); } } public class Mammal : Animal { public Mammal() { Debug.Log("Construct Mamal!"); } } public class Sheep : Mammal { public Sheep() { Debug.Log("

WPF 启动初始界面

不经意间发现了wpf的这个小玩意,感觉蛮有意思的.我在项目中添加了一张图片 如图: wpf-1.JPG(10.73 K) 2010-6-6 17:04:47 然后再这张图片的属性中设置它的生成操作为SplashScreen 如图: wpf-2.JPG(13.51 K) 2010-6-6 17:04:47 之后f5启动程序,你会发现在你主程序启动之前会出现一个0.5秒的动画,当然这个是默认的,您可以通过程序来进行对它的控制. 博友心声:怎么控制呢? DebugLZQ:首先让我们看看这个过程到底发生

认识元数据和IL(下)&lt;第五篇&gt;

书接上回: 第二十四回:认识元数据和IL(上) , 第二十五回:认识元数据和IL(中) 我们继续. 终于到了,说说元数据和IL在JIT编译时的角色了,虽然两个回合的铺垫未免铺张,但是却丝毫不为过,因为只有充分的认知才有足够的体会,技术也是如此.那么,我们就开始沿着方法调用的轨迹,追随元数据和IL在那个神秘瞬间所贡献的力量吧 5 元数据和IL在JIT编译时 CLR最终执行的只有本地机器码,所以JIT编译的作用是在运行时将IL代码解析为机器码执行.对于JIT编译,我们会以专门的篇幅来全面了解,本文只