学习C#或者面试经常会遇到关于interface abstract class ,vitual method 等异同点,为此总结一下帮助记忆:
Virtual
:用于方法声明时,
不能
用于class 声明时,这与abstract 不同
Virtual 和abstract 都能用于方法的声明,但是是virtual 和abstract
不能同时
使用修饰方法
Abstract 方法只能包含在abstract class中,而且abstract 方法不能有方法体,
必须一定
在继承类中实现。
Abstract, extern , partial 表示的方法 可以不包含method body,其他的方法 必须包含方法体,partial 声明的方法必须返回void,且必须在partial 的class 或者struct 中
Virtual 方法可以包含在abstract class 和普通class 中,
必须
拥有方法体,如果有返回值时 方法必须有返回值,它是一个虚方法,直到声明一个类的实例之前,它都不存在于真实的内存空间中
partial:
再3.0之前修饰class,再3.0开始可以修饰class 和method,partial method 只能包含在partial class 或者partial struct中。 partial class 可以有两个或以上
partial method 包含两部分,一部分为定义(defining),一部分是实现,定义中不能包含方法体, 实现部分必须包含方法体
partial method 必须为void 返回值,并且不能有out 输出参数
partial method 只能用 unsafe and static 两个修饰符修饰
Interface 和 abstract class
抽象类是一个不完全的类,是对对象的抽象,而接口是一种行为规范。
Abstract class
不能
创建实例,继承abstract class 时,其中的虚方法
必须被
重写(如果继承abstract class 子类 依然是abstract class,那么可以不实现abstract method),而vitual 方法可以不被重写,而且虚方法的方法体可以被执行。如果virtual method被重写了那么在执行时将调用重载后的方法,这是
继承和多态
Interface
:
声明时可以使用访问限制符(public,private…),但是其中包含的方法不能使用访问限制符,方法不能包含方法体,这与抽象方法(abstract method)相同
Interface 中
可以
包含
Property
如(int Age { get; set; }),但是
不能
包含
field
(字段),并且方法和属性都不能用访问限制符号来修饰,他们继承interface 的访问限制,方法和属性不能同时用abstract 等符号修饰
Interface
不能
有构造函数,但是abstract class
能
有构造函数
Interface 被继承时其中的方法都
必须
被实现,这与abstract class 相同
Interface 可以被interface 继承,就是接口能继承与接口,如:
public interface MyInterface2 : MyInterface
Interface 中的属性和方法必须在类中实现,即implement,implement是不能使用override关键字,override 关键字用于virtual和abstract method 的重写, 而interface中的方法和属性直接定义相同的即可implement
转载于:https://www.cnblogs.com/anthonyBlog/archive/2012/08/10/2631398.html
菜鸟开始上路了..学习C#或者面试经常会遇到关于interface abstract class ,vitual method 等异同点,为此总结一下帮助记忆:Virtual :用于方法声明时,不能用于class 声明时,这与abstract 不同Virtual 和abstract 都能用于方法的声明,但是是virtual 和abstract 不能同时使用修饰方法A...
Partial 部分方法顾明思议是方法的一部分,不完整的,在ide编译时候,会将所有部分方法加载到一起统一编译,如果分部方法没有被实现,编译器就不会、对他们进行编译。
局部类型的限制
(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。(2) 同一个类型的各个部分必须都有修饰符 partial。(3) 使用局部类型时,一个类型的各个部分必须位于相同的命名空间中。(4) 一个...
一、实现的效果
C#的分部关键字(
partial)能够拆分一个类、一个结构、一个接口或一个方法为两个或更多个的文件,分部的每个文件都可以包含自己的类型和方法,程序编译时会将同类的分部内容合并为一个。
这是关于《分部类(
partial)和方法》的示例程序工程https://download.csdn.net/download/xiaochenXIHUA/85236324
二、分部类
2.0、类的修饰符
类修饰符说明
类修饰符说明
virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义。
它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能私有的。毕竟加上virtual或abstract就是让子类重新定义的,而private成员是不能被子类访问的。
但是它们的区别很大。(virtual是“虚拟的”,abstract是“抽象...
本人理论较差,之前会做却不明原因,最近在改别人的代码发现实现方式完全不同,但对于我这个理论白痴来说完全不知道为什么别人要这么写,好处在哪里。
没有理论的指导,会用也只是不断的Copy前人,永远无法让程序拥有自己的灵魂。
创新! 为什么各种设计模式、框架都是老外先想出来?创新,国人要自强。而只有明白了原由才能创新,没有庞大的理论知识支撑一切都是空谈。我不想永远跟着别人跑,所以我决定从今天开始我要...
对typescript 有一定了解的,会发现 interface 和 type 很相似,类型定义上,很多时候,用两种方式都能实现。
三分钟直入主题, 除了语法不同外,interface和type主要有区别
1 类型别名可以用于其它类型 (联合类型、元组类型、基本类型(原始值)),interface不支持
type PartialPointX = { x: number };
type PartialPointY = { y: number };
// union(联合)
type PartialPoint
1.什么是局部类型?
C# 2.0 引入了局部类型的概念。局部类型允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。
局部类型适用于以下情况:
(1) 类型特别大,不宜放在一个文件中实现。
(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。
(3) 需要多人合作编写一个类。
局部类型是一个纯语言层的编译处理,不影响任何执...
C#的partial关键字用于定义分部类(partial class)和分部方法(partial method)。分部类允许将一个类的定义分散在多个文件中,这样可以更好地组织和管理代码。分部类的定义需要使用partial关键字,并且需要保证每个部分都有相同的访问修饰符、类名和命名空间。在不同的部分中,可以定义不同的成员(字段、属性、方法等),这些成员会被合并在一起形成一个完整的类。123
#### 引用[.reference_title]
- *1* *2* [C# - partial 关键字](https://blog.csdn.net/wumingxiaoyao/article/details/125945881)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
- *3* [C#的分部类(partial)和方法](https://blog.csdn.net/xiaochenXIHUA/article/details/124467391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item]
[ .reference_list ]