C# - 阻止派生类重写虚成员

 1 using System;
 2
 3 namespace 类_阻止派生类重写虚成员
 4 {
 5     // 声明一个抽象类Animal(用abstract关键字声明抽象类)
 6     public abstract class Animal
 7     {
 8         // 基类的抽象方法Voice(); 功能在派生类实现
 9         public abstract void Voice();
10     }
11
12     // 派生类(子类)继承自Animal
13     //
14     public class Horse : Animal
15     {
16         // 用sealed修饰重写的Voice()方法,无法在Horse的派生类中重写
17         public sealed override void Voice()
18         {
19             Console.WriteLine("马发出嘶....嘶....嘶....嘶的声音");
20         }
21     }
22
23     // 派生类(子类)继承Horse类
24     public class Test : Horse
25     {
26         /*--------------------------------------------------
27          // 无法重写Horse基类的密封(sealed)的方法Voice()
28         public override void Voice()
29         {
30
31         }
32         ---------------------------------------------------*/
33     }
34
35     class Program
36     {
37         static void Main(string[] args)
38         {
39             // 抽象类不能被实例化
40             //Animal a = new Animal();    // 编译错误
41             Horse h = new Horse();
42             h.Voice();
43
44             Console.ReadLine();
45         }
46     }
47 }

时间: 2024-10-11 12:55:42

C# - 阻止派生类重写虚成员的相关文章

【C/C++学院】0825-类模板/final_override/类模板与普通类的派生类模板虚函数抽象模板类/类模板友元/位运算算法以及类声明/Rtti 实时类型检测/高级new创建/类以及函数包装器

类模板 类模板多个类型默认类型简单数组模板 #pragma once template <class T=int>//类模板可以有一个默认的值 class myArray { public: myArray(); ~myArray(); }; #include "myArray.h" template <class T=int>//每一个函数都需要加上一个默认的值 myArray<T>::myArray() //类模板成员函数在外部,需要加载类型初始

(继承及其访问限定符)&&(派生类及其默认成员函数)&&(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

派生表中第一个基类没有虚函数,派生类存在虚函数时的内存布局

单继承的例子: #include <iostream> using namespace std; class A { public: A() { a = 1; ch = 'a'; //ASCII码97 } private: int a; char ch; }; class C : public A { public: C() { c = 3; } virtual void print() { cout << "C" << endl; } privat

(继承及其访问限定符)&amp;&amp;(派生类及其默认成员函数)&amp;&amp;(赋值兼容规则)

◆继承: ★继承概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能.这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程. 继承定义格式 ★继承关系&访问限定符 class Base { public: Base() { cout<<"B()" <<endl; } ~Base () { cout<<"~

面向对象程序设计——概述,定义基类和派生类,虚函数

一.OOP:概述 面向对象程序设计的核心思想是数据抽象.继承和动态绑定.通过使用数据抽象,我们可以将类的接口和实现分离:使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象. 1)继承 通过继承联系在一起的类构成一种层次关系.通常在层次关系的根部有一个基类,其他类则直接或间接地从基类继承而来,这些继承得到的类称为派生类.基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自的成员. 在C++语言中,基类将类型相

hibernate实体继承问题(派生类重写基类某数学系的get方法)

目标:hibernate的所有实体类的主键均继承一个基类IdEntity,基类如下:  /**  * 统一定义id的entity基类.  * @author MingDao  */ // JPA基类标识 @MappedSuperclass public abstract class IdEntity {  protected Long id;  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  public Long getId(

c++之——派生类的同名成员和函数调用方式及构造析构顺序

1 #include<iostream> 2 using namespace std; 3 class Object { 4 public: 5 Object(int test) :a(1), b(2), c(3) { cout << "object 构造\n"; } 6 ~Object() 7 { 8 cout << "object 析构\n"; 9 } 10 int a; 11 int b; 12 int c; 13 void

C++派生类的成员内存布局

class A {}; class B : public virtual A {}; class C : public virtual A {}; class D : public B, public C {}; int main() { A a; B b; C c; D d; cout << sizeof(a) << endl; cout << sizeof(b) << endl; cout << sizeof(c) << endl

详解C++中基类与派生类的转换以及虚基类

很详细!转载链接 C++基类与派生类的转换在公用继承.私有继承和保护继承中,只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生类中全部都按原样保留下来了,在派生类外可以调用基类的公用成员函数访问基类的私有成员.因此,公用派生类具有基类的全部功能,所有基类能够实现的功能, 公用派生类都能实现.而非公用派生类(私有或保护派生类)不能实现基类的全部功能(例如在派生类外不能调用基类的公用成员函数访问基类的私有成员).因此,只有公用派生