C#之抽象类、虚方法、重写、接口、密封类
来源:互联网 发布:电脑远程开机软件 编辑:程序博客网 时间:2024/04/28 02:10
前言
学了这么长时间的C#,我想说对于这个东东还是不是特别了解它,以至于让我频频郁闷。每次敲代码的时候都没有一种随心所欲的感觉。所以不得不在网上搜集一些资料,look 了 look~
内容
接触了C#很长时间了,现在总结一下C#类关键字(abstract、virtual、override、sealed(这是新接触的)、new)的使用和它的体现。
1、C#中用abstract声明抽象类、抽象方法:
- 抽象类不能直接实例化,必须由派生类实现。
- 抽象方法所在类必须为抽象类。
- 抽象方法中不包含方法主体,声明的方法为虚方法,必须由派生类以override(重写)实现此类方法。
- 抽象方法没有方法主体;
2、virtual关键字
- 首先用virtual声明的虚方法可以被子类重写。
- 在派生类用override覆盖此方法;
- 不覆盖也可由对象调用;
- 有些方法无此关键字声明,在在派生类调用的时候要用new关键字隐藏原方法;
- abstract和virtual:方法重写的时候都要求用override进行重写;interface的方法和abstract方法都要求实现。
3、sealed关键字
- 当对一个类应用sealed关键字的时候,这个修饰符会阻止其他类从该类继承,类似于Java中的final关键字;
4、密封类
- 在C#中的密封类是指该类不能被继承;
- 在密封类中的方法不能再次定义为密封的;
- 密封类不能用作基类,因此也能定义为抽象类,在运行调用时速度较快;
- 主要作用是防止派生;
实践
根据上面的理解,在网上找了相应的例子,敲这个例子到调试好,大概花费了一上午的时间。感觉从这个例子中学到了很多。从中也投射出UML中类图与接口之间的调用;对抽象类的继承;对接口的实现;明白了虚方法与方法的重写;对功能的封装。。。中间遇到问题后,问了问荣凯大神,他上来就问我想要干嘛!!!我说我也不清楚。很是自卑啊~~~后来自己理清了关系。大概就是这个样子:“让老师实现‘吃’这个功能。其中先让老师继承People这个抽象类,People类实现IPeople这个接口。
<span style="font-size:24px;">//作者:阿童木子using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 类关键字{ class Program { static void Main(string[] args) { Teacher teacher=new Teacher() ; ITeacher itea = (ITeacher) teacher; itea.Eat(); Console.ReadKey(); Master master = new Master(); master.Teach(); } } //枚举 // public enum sex { Male = "男", Famale = "女" } public enum Sex { Male = '男', Female = '女' } //结构体 StudentParams(params关键字表示类型一样,数量不详,是一个可变的方法参数) public struct StudentParams { public int ID; public string name; public string grade; public Sex sex; public string department; } //接口 interface IPeople { string Name { set; get; } short Age { set; get; } Sex Sex { set; get; } void Eat(); } //Teacher接口 interface ITeacher:IPeople { void Teach(); } //Student接口 interface IStudent:IPeople { void Study(); } //抽象基类 abstract class People:IPeople { private string name; private short age; private Sex sex; public string Name { get { return name != null ? name : "zhoulitong"; } set { if (value!="" ) { name = value; } } } public Sex Sex { get { return sex; } set { value = sex; } } public short Age { get { return age > 0 ? age : (short)0; } set { if (value >=0) { age = value; } } } //虚方法 public virtual void Eat() { Console.WriteLine("People eat."); } //抽象基类虚方法 public abstract void Sleep(); //{ // Console.WriteLine("People sleep."); //} } class Teacher:People,ITeacher { //重写基类虚方法 public override void Eat() { Console.WriteLine("Teacher eat."); } //重写抽象基类虚方法 public override void Sleep() { Console.WriteLine("Teacher sleep."); //throw new NotImplementedException(); } public void Teach() { Console.WriteLine("Teacher teach."); } } //定义一个密封类,防止派生; sealed class Master : Teacher { protected void Manage() { } }}</span>这个例子体现在UML图中大致是这个样子的。
结语
这次学习最大的收获就是:
1、当了解一种东西的时候,一定要弄清楚需求;
2、敲代码的时候分块敲;
3、结合自己学过的东西(比如这次可以结合UML图);
4、对于不懂的东西敢于实践。(实践出真知)
感谢您的宝贵时间~~~
0 1
- C#之抽象类、虚方法、重写、接口、密封类
- c# 中的抽象类、接口、密封类、虚方法介绍
- C#密封类、密封方法
- C# 抽象类、密封类
- 抽象类与密封方法
- C# 密封类和密封方法
- C# 密封类和密封方法
- C#之密封类
- c#之密封类
- 入职第二天—接口、抽象类、密封类、虚方法
- 大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”
- C#中的虚类、密封类、抽象类
- C#基础概念之密封类,属性访问器,接口
- C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别
- C# 中的接口和密封类
- C#入门10.6——密封类与密封方法
- C#回顾学习笔记三十二:密封类和密封方法
- C#学习笔记14-密封类和密封方法
- 【Java EE (Struts2 + Spring + Hibernate)开发】:Hibernate(一)基本用法
- Docker在测试领域的应用
- AltiumDesigner05——常见芯片的封装类型
- 【Java EE (Struts2 + Spring + Hibernate)开发】系列之 Spring(一)基本用法
- 【Java EE (Struts2 + Spring + Hibernate)开发】:Spring(二)深入使用
- C#之抽象类、虚方法、重写、接口、密封类
- 显示当前日期和时间
- t-sql out output ref
- 显示程序运行时间
- 关于 QListWidget IconMode的使用
- 123
- java中数据的默认属性
- 【Java EE (Struts2 + Spring + Hibernate)开发】:Web 之 【JSP基础知识】
- Caused by: java.lang.NoClassDefFoundError: com/tansuosoft/discoverx/common/Config