简述c#之sealed 修饰符
sealed 修饰符表示密封
用于类时,表示该类不能再被继承,不能和 abstract 同时使用,因为这两个修饰符在含义上互相排斥
用于方法和属性时,表示该方法或属性不能再被重写,必须和 override 关键字一起使用,因为使用 sealed 修饰符的方法或属性肯定是基类中相应的虚成员
通常用于实现第三方类库时不想被客户端继承,或用于没有必要再继承的类以防止滥用继承造成层次结构体系混乱
恰当的利用 sealed 修饰符也可以提高一定的运行效率,因为不用考虑继承类会重写该成员
示例:
Code
using System;
using System.Collections.Generic;
using System.Text;
namespace Example06
{
class Program
{
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
public sealed override void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class C : B
{
public override void G()
{
Console.WriteLine("C.G");
}
}
static void Main(string[] args)
{
new A().F();
new A().G();
new B().F();
new B().G();
new C().F();
new C().G();
Console.ReadLine();
}
}
}using System;
using System.Collections.Generic;
using System.Text;
namespace Example06
{
class Program
{
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
在基类(父类)中用virtual修饰符声明一个虚方法,然后在在派生类(子类)中用override修饰符覆盖基类虚方法。表明是对基类的虚方法重载。
这种优势在于它可以在程序运行时再决定调用哪一个方法,这就是所谓的“运行时多态”
或者称动态绑定。
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
public sealed override void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class C : B
{
public override void G()
{
Console.WriteLine("C.G");
}
}
static void Main(string[] args)
{
new A().F();
new A().G();
new B().F();
new B().G();
new C().F();
new C().G();
Console.ReadLine();
}
}
}
结果: 类 B 在继承类 A 时可以重写两个虚函数,如图所示:
由于类 B 中对 F 方法进行了密封, 类 C 在继承类 B 时只能重写一个函数,如图所示:
控制台输出结果,类 C 的方法 F 只能是输出 类B 中对该方法的实现:
A.F A.G B.F B.G B.F C.G
转载于:https://www.cnblogs.com/TJessica/p/7059391.html
简述c#之sealed 修饰符相关推荐
- C#--virtual,abstract,override,new,sealed修饰符学习
1.参考博客 http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- c# 访问修饰符的访问权限
1. 访问修饰符. 指定声明的类型和类型成员的可访问性. (1) public:是类型和类型成员的访问修饰符.公共访问是允许的最高访问级别.对访问公共成员没有限制. (2) private:是一个成员 ...
- python修饰符用法_c#教程之C#语言中的修饰符汇总
https://www.xin3721.com/eschool/python.html 修饰符是用于限定类型以及类型成员的申明的一种符号. 下面主要从C#中的访问修饰符,作用于类和结构的修饰符,用在方 ...
- 用sealed修饰的类有什么特点
sealed 修饰符用于防止从所修饰的类派生出其它类.如果一个密封类被指定为其他类的基类,则会发生编译时错误. 密封类不能同时为抽象类. sealed 修饰符主要用于防止非有意的派生,但是它还能促使某 ...
- C# 访问修饰符和声明修饰符
一.访问修饰符的基本说明 1.public: 公有的,是类和类成员的访问修饰符,访问不受限制 2.private: 私有的,是一个成员访问修饰符,不能修饰类,只有在声明它的类和结构内部可以访问 3.i ...
- 第四回 基类中的修饰符,应该根据你对架构的理解去定义它们,没有绝对的
基类中的修饰符,其实就是C#里的那几种修饰符,public ,proteced,internal,privat这四种基础类型,当然也还一个组合类型internal protected,它们都是C#里最 ...
- [译]Effective Kotlin系列之探索高阶函数中inline修饰符(三)
简述: 不知道是否有小伙伴还记得我们之前的Effective Kotlin翻译系列,之前一直忙于赶时髦研究Kotlin 1.3中的新特性.把此系列耽搁了,赶完时髦了还是得踏实探究本质和基础,从今天开始 ...
- 【转】c#中类的默认访问修饰符
最近去面试,被问到c#中类的默认访问修饰符,被搞晕了,回来在网上找到一篇好文章,才明白到底是怎么回事. 以下转自:http://blog.163.com/wangzhenbo85@126/blog/s ...
最新文章
- Android 进阶 Fragment 介绍和使用 (一)
- Matlab-使用逻辑值进行索引
- thinkphp通过模型查询mysql_thinkPHP视图模型详解,把mysql表关联简单化!
- wxWidgets:wxSpinCtrlDouble类用法
- SAP Fiori国际化支持之UI5 RTL support的实现原理
- Springboot-Jpa多数据库配置-2.0+版本
- matlab如何画函数的外包络曲线,怎样在MATLAB中划出一个函数的包络线?
- 分析mysql慢查询_mysql慢查询的分析方法_MySQL
- ArcGIS 可视性分析
- Atitit 提升开发效率几大策略 目录 1. 提升效率三原则	2 1.1. 更少的工作	2 1.2. 优化配置减少等待	2 1.3. 提升一次性处理能力	2 2. 方法提升	3 2.1. 分类优
- JMETER badboy 下载及安装
- html怎么用2个caption不换行,caption怎么用
- 从零开始的unity3d入门教程(二)----基本功能讲解
- 淘客app开发成本要多少
- 进制转换【最全进制转换汇总】(整数_小数_正数_负数)正负数整数小数十进制转任意进制-正负数整数小数任意进制转十进制-正负数低进制转高进制-正负数高进制转低进制
- 想知道如何图片转文字?这几个方法你别错过
- 使用idea进行远程调试
- win10常用快捷键及官网说明
- RISC-V学习笔记【执行】
- 少吃精粮,多吃粗粮 (吃纯燕麦治湿疹)