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 基础知识整理的更多相关文章

  1. 【OGG】OGG基础知识整理

    [OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...

  2. Kali Linux渗透基础知识整理(四):维持访问

    Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...

  3. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  4. java部分基础知识整理----百度脑图版

    近期发现,通过百度脑图可以很好的归纳总结和整理知识点,本着学习和复习的目的,梳理了一下java部分的知识点,不定期更新,若有不恰之处,请指正,谢谢! 脑图链接如下:java部分基础知识整理----百度 ...

  5. C#基础知识整理

    年时,北风吹雁雪纷纷,一条秋裤冻上头.冷的连手都懒得动,就随便翻翻书,也没有更新博客,如今年已过,开始投入到正常的工作状态中,趁现在需求还没有来,把C#基础知识梳理一下,其实一直以来就想这样做的,对于 ...

  6. wifi基础知识整理

    转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...

  7. JavaScript基础知识整理

    只整理基础知识中关键技术,旨在系统性的学习和备忘. 1.在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0,而 undefined 的操作象特殊值NaN ...

  8. Oracle ASM 磁盘组基础知识整理(收藏版)

    转至:https://cloud.tencent.com/developer/article/1494403 为什么要写这么一篇基础知识呢?还是有那么一点点原因的,不是胡编乱造还真是有真实存在的事件的 ...

  9. Linux基础知识整理

    一.基础知识 1.Linux简介 Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件 ...

随机推荐

  1. 100-days: twelve

    Title:   Mark Zuckerberg wants Facebook's to emulate China's WeChat, but can it? emulate v.效仿,模仿 As ...

  2. [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 ...

  3. ant 执行java文件,java文件中含中文,显示乱码

    在build.xml文件run target下添加下面一行 <sysproperty key="file.encoding" value="UTF-8" ...

  4. ECMAscript,DOM,BOM哪个比较重要

    ECMA > DOM > BOM ECMA是JS的核心,语法.变量.对象.各种对象的API.作用域.原型链.闭包.This指向.构造函数等等必须要熟练,有了这些基础你才能去熟练的操作DOM ...

  5. angular模拟web API

    现象:angular Cannot find module 'angular-in-memory-web-api'报错找不动“angular-in-memory-web-api”模块 解决:1.控制台 ...

  6. apache提示make_sock?

    [root@localhost apache]# /etc/init.d/*_apache restart 停止 *_apache: [失败] 正在启动 *_apache:(98)Address al ...

  7. AutoCAD开发4--添加块)

    Private Sub CommandButton3_Click() Dim pInsertPnt As Variant 'pInsertPnt(0) = 100.5141: pInsertPnt(1 ...

  8. nginx的https代理http配置

    http { upstream https2http_proxy{ server 192.168.22.103:80; } server { listen 1443 ssl; server_name ...

  9. jvm参数与GC

    一.JVM的新生代.老年代.与永久代 JVM中的堆,一般分为三大部分:新生代.老年代.永久代: 1.新生代:主要是用来存放新生的对象,一般占据堆的1/3空间.由于频繁创建对象,所以新生代会频繁触发Mi ...

  10. jquery print属性设置

    一,需求背景 项目中遇到打印功能,想实现完美的打印功能,对元素进行操作等,可以使用jquery print 插件. 二,依赖文件  git地址请戳这里 1,jquery 2,jquery.print- ...