C#的static,interface,virtual,abstract,override的区别用法
C# 是面向对象的程序设计语言,每一个函数都属于一个类。 Static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现。也就是说,这个方法属于类,但是不属于任何成员,不管这个类的实例是否存在,它们都会存在。就像入口函数Static void Main,因为它是静态函数,所以可以直接被调用。 Virtua:当一个方法被声明为Virtual时,它是一个虚拟方法,直到你使用ClassName variable = new ClassName();声明一个类的实例之前,它都不存在于真实的内存空间中。这个关键字在类的继承中非常常用,用来提供类方法的多态性支持。 overrride:表示重写 这个类是继承于Shape类 一个生动的例子 :老爸表示基类(被继承的类) 儿子表示子类(继承的类) 老爸用virtual告诉儿子:"孩子,你要继承我的事业,在这块上面可以自己继续发展你自己的" 儿子用override告诉全世界:"这个我可不是直接拿我爸的,他只是指个路给我,是我自己奋斗出来的" abstract:抽象方法声明使用,是必须被派生类覆写的方法,抽象类就是用来被继承的;可以看成是没有实现体的虚方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法;抽象类不能有实体的。详解---------------------------------------------- interface用来声明接口 1.只提供一些方法规约,不提供方法主体. 如: public interface IPerson { void getName();//不包含方法主体 } 2.方法不能用public abstract等修饰,无字段变量,无构造函数。 3.方法可包含参数。 如 public interface IPerson { void getAge(string s); } 一个例子(例1): public interface IPerson { IPerson(); //错误 string name; //错误 public void getIDcard();//错误 void getName(); //right void getAge(string s); //right } 实现interface的类 1.与继承类的格式一致,如 public class Chinese:IPerson{} 2.必须实现 interface 中的各个方法 例2,继承例1 public class Chinese:IPerson { public Chinese(){} //添加构造 public void getName(){} //实现getName() public void getAge(string s){} //实现getAge() } abstract声明抽象类、抽象方法 1.抽象方法所在类必须为抽象类 2.抽象类不能直接实例化,必须由其派生类实现。 3.抽象方法不包含方法主体,必须由派生类以override方式实现此方法,这点跟interface中的方法类似 如 public abstract class Book { public Book() { } public abstract void getPrice(); //抽象方法,不含主体 public virtual void getName() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getName()"); } public virtual void getContent() //虚方法,可覆盖 { Console.WriteLine("this is a test:virtual getContent()"); } public void getDate() //一般方法,若在派生类中重写,须使用new关键字 { Console.WriteLine("this is a test: void getDate()"); } } public class JavaBook:Book { public override void getPrice() //实现抽象方法,必须实现 { Console.WriteLine("this is a test:JavaBook override abstract getPrice()"); } public override void getName() //覆盖原方法,不是必须的 { Console.WriteLine("this is a test:JavaBook override virtual getName()"); } } 测试如下: public class test { public test() { JavaBook jbook=new JavaBook(); jbook.getPrice(); //将调用JavaBook中getPrice() jbook.getName(); //将调用JavaBook中getName() jbook.getContent(); //将调用Book中getContent() jbook.getDate(); //将调用Book中getDate() } public static void Main() { test t=new test(); } } virtual标记方法为虚方法 1.可在派生类中以override覆盖此方法 2.不覆盖也可由对象调用 3.无此标记的方法(也无其他标记),重写时需用new隐藏原方法 abstract 与virtual : 方法重写时都使用 override 关键字 接口定义以大写字母I开头。方法只定义其名称,在C#中,方法默认是公有方法;用public修饰方法是不允许的,否则会出现编译错误;接口可以从别的接口继承,如果是继承多个接口,则父接口列表用逗号间隔。 interface使用 using System; |
C#的static,interface,virtual,abstract,override的区别用法相关推荐
- C#中的static,interface,virtual,abstract,override的用法
C# 是面向对象的程序设计语言,每一个函数都属于一个类. Static:当一个方法被声明为Static时,这个方法是一个静态方法,编译器会在编译时保留这个方法的实现. 也就是说,这个方法属于类,但是不 ...
- Java技术——Interface与abstract类的区别
0. 前言 抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在对多态提供了非常好的支持.他们两者有很大的相似,甚至可以互换,但是也有区别.对于他们的选择反应了你对该问题的 ...
- interface与abstract类的区别
interface与abstract类的区别 abstract class 只能被继承extends,体现的是一种继承关系,而根据继承的特征,有继承关系的子类和父类应该是一种"is-a&qu ...
- C#--virtual,abstract,override,new,sealed修饰符学习
1.参考博客 http://www.cnblogs.com/oneword/archive/2009/07/02/1515279.html http://www.cnblogs.com/mygood ...
- 温故而知新:new与override的差异以及virtual方法与abstract方法的区别
先直接看代码吧: using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){B ...
- Sealed,new,virtual,abstract与override的区别
1. Sealed: a) 密封类不能被继承. b) 密封方法可以重写基类中的方法,但其本身不能在任何派生类中进一步重写.当应用于方法或者属性时,sealed修饰符必须始终与Override一起使用. ...
- C# selecd,new,virtual,abstract与override
本文大部分内容摘自 <.NET开发专家·亮剑.NET : .NET深入体验与实战精要> 博主只是搬运工,不喜勿喷. 关于虚方法,抽象类这一部分一直不是太清楚,目前的工作中也接触不到这些. ...
- abstract、virtual、override 和 new
abstract.virtual.override 和 new 是在类的继承关系中常用的四个修饰方法的关键字,在此略作总结. 1. 常用的中文名:abstract 抽象方法,virtual 虚方法, ...
- C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载
C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载 using System; using System.Collections.Generic; using Sys ...
最新文章
- Android获取内部和SDCard的存储空间
- shell执行mysql命令
- python pandas读取excel-python pandas 读取文件 写入文件excel
- h5页面的写法_8. 开始构建我们的 index.hbs 页面
- numpy-自定义ufunc函数和广播
- 【外贸人必看骗术】和中东客户做生意
- drupal启动过程
- MSP430F5529 DriverLib 库函数学习笔记(九)SPI
- python关闭exe程序_Win 10 中使用 Python 碰到的奇怪现象
- cron每月1号_微信服务号按粉丝标签分组群发消息怎样实现?
- [Python设计模式] 第13章 造小人——建造者模式
- win10 家庭版(20H2) 安装sqlserver2000 指南
- matlab 读取 Microsoft Excel 电子表格文件不推荐使用 xlsread
- si24r1程序_SI24R1多对一通信功能(ACK模式,ACK不带PAYLOAD)程序资料开发
- part2:服务器接收企业微信用户消息
- 关于URL的转码与解码
- java mission control_Java Mission Control之使用
- H5的video用法
- 沉浸其境,共赴云栖数智硬核美学
- NYOJ-1273-宣传墙
热门文章
- STL常用的算术和生成算法
- 经典C语言程序100例之五
- mysql物理备份迁移注意细节_物理拷贝备份mysql到其他机器上恢复
- 看代码的软件_软件著作权申请中常见的补正问题及解决方式
- linux系统生成的新文件是什么编码的,Linux系统的默认编码设置
- Oracle数据库表信息,序列,视图等导出,导入。(数据库备份和恢复)
- 第十八天:规划风险管理和识别风险
- 文件操作ofstream,open,close,ifstream,fin,按照行来读取数据, fstream,iosin iosout,fio.seekg(),文件写入和文件读写,文件拷贝和文件
- Spring整合的quartz任务调度的实现方式
- 处理数字_3_计算表的行数