C#基础 类、结构、抽象类、接口的相关概念

先来简单说一下他们各自的含义是什么:

  1. 类(class):
    类类型是由字段数据(成员变量)和操作字段数据的成员(属性、方法、
    构造函数、事件等)所构成的自定义类型。其中字段数据表示类实例(对象)的 状态。
    2.结构(struct):
    C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可
    以 包括数据成员和方法成员。
    3.抽象类:
    ①:抽象类是特殊的类,只是不能被实例化;
    ②:除此以外,具有类的其他特性;
    ③:重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。
    ④:另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
    4.接口:
    接口是引用类型,类似于类,和抽象类的相似之处有三点:
    ①:不能实例化;
    ②:包含未实现的方法声明;
    ③:派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
    另外,接口特性如下:
    接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且
    这些成员都被定义为公有的。除此之外,不能包含任何其他成员,
    例如:常量、域、构造函数、析构函数、静态成员。
    一个类可以直接继承多个接口,但只能直接继承一个类。
    5.类与结构的区别:
    ①:类是引用类型,它在堆(heap)中分配空间,栈中保存的只是引用。
    结构是值类型,它在栈(Stack)中分配空间。
    ②:类对象通常用来传递大数据,而结构对象则用来传递小数据。
    ③:类可以被继承,而结构则不支持。
    ④:结构对象不能像类对象一样赋值为null。
    ⑤:结构不能像类一样定义析构器。
    ⑥:结构不能像类一样定义为抽象的。
    ⑦:在结构中不能重写方法,除非是object类型的如下方法:
    Equals()
    GetHashCode()
    GetType()
    ToString()
    若要让结构具有多态特性,可以让其实现接口。
    ⑧:在类中定义的事件是线程安全的,而结构则不是。
    ⑨:结构总是具有一个默认的公共无参构造函数,但却不能像类一样
    定义私有的无参构造函数(结构也不能再定义公共的无参构造函数,
    这与类不相同)。
    ⑩:类中的静态构造函数会被调用,而结构却不能。因此在结构中
    定义的静态构造函数,虽然可以编译通过,但却没有价值。
    11、结构不能像类一样定义volatile字段。volatile字段主要用于并发
    ,它相当于方法体的lock。
    12、可以对结构类型使用sizeof,对类则不行。
    13、类的字段会被自动初始化为0/false/null,而结构则不能。
    14、在结构中不能直接对字段初始化,而类则可以。
    15、结构和类对于System.Object.Equals()方法的体现是不相同的。
    6.类与抽象类:
    ①:都可以被继承 ;
    ②:抽象类不能被实例化,只是用来继承的。普通类可以实例化 ;
    ③:抽象方法只有含方法声明而没有方法体且必须包含在抽象类里面 ;
    ④:子类继承抽象类必须实现抽象类中的抽象方法除非子类也是抽象类
    ⑤:抽象类中可以包含抽象方法也可以包含实例方法;
    7.接口与类的区别:
    ①:接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、
    事件和索引符的组合而已,并且也只能包含这四种成员;类除了这四种
    成员之外还可以别的成员(如字段)。
    ②:不能实例化一个接口,接口只包括成员的签名;而类可以实例化
    (abstract类除外)。
    ③:接口没有构造函数,类有构造函数。
    ④:接口不能进行运算符的重载,类可以进行运算符重载。
    ⑤:接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以
    有修饰符(如:虚拟或者静态)。
    ⑥:派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不然。
    那么为什么还要有接口呢?
    主要原因是它是一种有效的契约。
    类有一些成员,不考虑把这些成员组合在一起,类只是一个拥有各种
    方法、字段和属性的列表,但为了能以某种方式使用类,必须知道类
    能执行那些功能,具体的操作就是声明执行一个或多个接口的类,
    类执行接口的方式是从接口中派生,再提供这个接口中定义的所有
    成员的执行方式。
    8.抽象类和接口之间的异同
    相同点:
    ①:都可以被继承
    ②:都可以有方法的声明
    ③:都不可以被实例化
    ④:子类必须实现基类的方法除非子类是抽象类

    不同点:
    ①:抽象类属于多继承,接口属于单继承
    ②:抽象类可以包含实例方法而接口不能
    ③:接口支持回调抽象类不能
    ④:子类实现抽象基类方法必须用override关键字而实现接口方法则
    不用override关键字
    ⑤:接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念
    ⑥:接口可以作用于值类型和引用类型,抽象类只能作用于引用类型
    (例如:Struct只能继承接口)
    ⑦:接口多定义对象的行为,抽象类多定义对象的属性。
    ⑧:如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类
    ⑨:接口对应是面向对象编程思想的重要原则:面向接口编程
    ⑩:抽象类对应则是设计模式的的精髓:面相抽象编程

原文地址:https://blog.51cto.com/14236887/2361890

时间: 2024-10-25 00:41:58

C#基础 类、结构、抽象类、接口的相关概念的相关文章

黑马程序员--java基础之多态,抽象类,接口,匿名内部类

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 4.4 子类的实例化过程 子类中所有的构造函数默认都会访问父类中空参数的构造函数. 因为每一个构造函数的第一行都有一条默认的语句super();. 子类会具备父类中的数据,所以要先明确父类是如何对这些数据初始化的. 为什么子类实例化的时候要访问父类中的构造函数呢? 那是因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,要先看父类是如何对自己的内容进行初始化的. P.S.

Swift基础(类,结构体,函数)

import Foundation // 创建一个类 class Student { // 属性(类的属性必须赋初值,如果不赋值,需要写自定义方法) var studentName: String var studentAge: Int // 方法 func fallInLove(girlName:String) { print("\(self.studentName)看上隔壁的\(girlName)") } // 构造方法(自定义init方法) init (studentName1:

Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权限修饰符,默认访问, 类,方法,成员变量 private 权限修饰符,私有访问, 方法,成员变量 static 静态修饰符 方法,成员变量 final 最终修饰符 类,方法,成员变量,局部变量 abstract 抽象修饰符 类 ,方法 我们编写程序时,权限修饰符一般放于所有修饰符之前,不同的权限修饰

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

java普通类、抽象类、接口、面向对象理解

1.面向对象编程: 面向对象编程的语言不止java一种,还有: simula 67(第一个面向对象语言,支持单继承和一定含义的多态和部分动态绑定): Smalltalk(第一个支持动态类型的语言,支持单继承.多态和动态绑定): EIFFEL(支持多继承.多态和动态绑定): C++(它的大部分基于类的特性继承自Simula.支持多继承.多态和部分动态绑定): C#(也支持单继承,与Java和C++等有很多类似之处): Python( [?pa?θ?n]是一种解释型.面向对象.动态数据类型的高级程序

java接口、接口、类、抽象类的区别

1.定义 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 2.Java接口与接口区别 Java接口,Java语言中存在的结构,有特定的语法和结构. package jiekou; public interface AreaInterface{ double pai=Math.PI; double area(); } 以上程序就是Java接口,是一个结构: 接口,一个类所

java面向对象基础(四):抽象类和接口

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

Java基础5:抽象类和接口

Java基础5:抽象类和接口 1 抽象类一般会实现一部分操作,并且留一些抽象方法让子类自己实现,比如Stringbuffer和Stringbuilder的父类abstractStringbuilder. 2 接口一般指一种规定,比如一个map接口中,可能需要实现增删改查等功能,如果你想实现一个具体map,这些方法就必须按照规定去实现. 3 另外,一个类可以实现多个接口,但是不能继承多个类. 然而接口却可以继承多个其他接口.这一点很神奇. 下面看一下具体的例子,有一些小细节平时可能不会注意. cl