abstract、virtual、sealed、 interface、struct 基础知识整理
abstract
|
abstract 修饰符指示被修改内容的实现已丢失或不完整。 abstract 修饰符可用于类、方法、属性、索引和事件。 在类声明中使用 abstract修饰符以指示某个类仅旨在作为其他类的基类。 标记为 abstract 的成员,或包含在抽象类中的成员,都必须由派生自抽象类的类来实现。 |
public abstract class Animal
{
public abstract void Breath();
} // Error 不能创建实例
Animal animal = new Animal(); public class Dog : Animal
{
public override void Breath()
{
System.Console.WriteLine("呼呼呼");
}
}
1.被 abstract 修饰的Animal类是不完整的,所以不能创建实例,只能被继承。
2.被 abstract 修饰的Breath方法内容已丢失,所以并没有方法主体,必须在基类中重写。
virtual
| virtual关键字用于修改方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。 |
public abstract class Animal
{
public virtual void Breath()
{
System.Console.WriteLine("深呼吸~");
}
}
public class Dog : Animal
{
public override void Breath()
{
System.Console.WriteLine("旺旺旺");
}
} Dog dog = new Dog();
dog.Breath();
1.被virtual修饰的Breath方法,必须有方法体。在基类中可以重写,也可以不重写。
interface
|
接口只包含方法、属性、事件或索引器的签名。 实现接口的类或结构必须实现接口定义中指定的接口成员。 |
public interface ISampleInterface
{
void SampleMethod();
} public class ImplementationClass : ISampleInterface
{
public void SampleMethod()
{
//
}
}
1.interface 中的方法不能包含方法体。
2.在基类中必须实现接口定义的成员。
sealed
|
应用于某个类时,sealed修饰符可阻止其他类继承自该类。 应用于方法或属性时,sealed修饰符必须始终与 override 结合使用。 |
public sealed class Dog : Animal
{
public override void Breath()
{
System.Console.WriteLine("旺旺旺");
}
} public class Dog1 : Dog
{
// cannot inherit from sealed class 'Dog'
}
public class Animal
{
public virtual void Breath()
{
}
}
public class Dog : Animal
{
public sealed override void Breath()
{
System.Console.WriteLine("旺旺旺");
}
} public class BigDog : Dog
{
public override void Breath()
{
// Error : Dog.Breath() 是密封的,无法重写
}
}
struct
|
struct 是一种值类型,通常用来封装小型相关变量组。 struct 也可以实现接口,且实现方法与类相同。 struct 可以包含构造函数、常量、字段、方法、属性、索引器、运算符、事件和嵌套类型,但如果同时需要上述几种成员,则应当考虑改为使用类作为类型。 |
public struct Book
{
public decimal price;
public string title;
public string author; // 构造函数必须有参数,在构造函数中必须给所有成员赋值。
public Book(decimal price,string title , string author)
{
this.price = price;
this.title = title;
this.author = author;
}
} var b = new Book(100M,"和谐","布吉岛");
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/
| 本文博客园地址:http://www.cnblogs.com/struggle999/p/7055787.html |
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
abstract、virtual、sealed、 interface、struct 基础知识整理的更多相关文章
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- java部分基础知识整理----百度脑图版
近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...
- C#基础知识整理
年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...
- wifi基础知识整理
转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...
- JavaScript基础知识整理
只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...
- Oracle ASM 磁盘组基础知识整理(收藏版)
转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...
- Linux基础知识整理
一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...
随机推荐
- 100-days: twelve
Title: Mark Zuckerberg wants Facebook's to emulate China's WeChat, but can it? emulate v.效仿,模仿 As ...
- [leetcode]19. Remove Nth Node From End of List删除链表倒数第N个节点
Given a linked list, remove the n-th node from the end of list and return its head. Example: Given l ...
- ant 执行java文件,java文件中含中文,显示乱码
在build.xml文件run target下添加下面一行 <sysproperty key="file.encoding" value="UTF-8" ...
- ECMAscript,DOM,BOM哪个比较重要
ECMA > DOM > BOM ECMA是JS的核心,语法.变量.对象.各种对象的API.作用域.原型链.闭包.This指向.构造函数等等必须要熟练,有了这些基础你才能去熟练的操作DOM ...
- angular模拟web API
现象:angular Cannot find module 'angular-in-memory-web-api'报错找不动“angular-in-memory-web-api”模块 解决:1.控制台 ...
- apache提示make_sock?
[root@localhost apache]# /etc/init.d/*_apache restart 停止 *_apache: [失败] 正在启动 *_apache:(98)Address al ...
- AutoCAD开发4--添加块)
Private Sub CommandButton3_Click() Dim pInsertPnt As Variant 'pInsertPnt(0) = 100.5141: pInsertPnt(1 ...
- nginx的https代理http配置
http { upstream https2http_proxy{ server 192.168.22.103:80; } server { listen 1443 ssl; server_name ...
- jvm参数与GC
一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...
- jquery print属性设置
一,需求背景 项目中遇到打印功能,想实现完美的打印功能,对元素进行操作等,可以使用jquery print 插件. 二,依赖文件 git地址请戳这里 1,jquery 2,jquery.print- ...