1.C#类和接口的区别

  接口是负责功能的定义,项目中通过接口来规范类,操作类以及抽象类的概念!

  而类是负责功能的具体实现!

  在类中也有抽象类的定义,抽象类与接口的区别在于:

  抽象类是一个不完全的类,类里面有抽象的方法,属性,也可以有具体的方法和属性,需要进一步的专业化。

  但接口是一个行为的规范,里面的所有东西都是抽象的!

  一个类只可以继承一个基类也就是父类,但可以实现多个接口

  PS:接口除了规范一个行为之外,在具体项目中的实际作用也是十分重要的,在面向对象的设计原则以及设计模式的使用中,无不体现作为一个接口的使用好处,最直接的就是设计原则中OCP(开放封闭原则),我们使用接口,而不需要关心他的具体实现,具体实现的细节变化也无关客户端(使用接口的类)的使用,对与扩展是开放的,我们可以另写一个接口的实现来扩展当前程序,而不影响上层的使用,但对修改是封闭的,即我们不能够再去修改接口的定义,当然这个“不能够”是指在规范原则上不应该这么做!

  2.抽象类和接口的区别

  答:

  抽象类(abstract class)可以包含功能定义和实现,接口(interface)只能包含功能定义

  抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性

  分析对象,提炼内部共性形成抽象类,用以表示对象本质,即“是什么”

  为外部提供调用或功能需要扩充时优先使用接口

  3. C#语言中,值类型和引用类型有何不同?

  解答

  值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。

  值类型变量直接把变量的值保存在堆栈中,引用类型的变量把实际数据的地址保存在堆栈中,而实际数据则保存在堆中。注意,堆和堆栈是两个不同的概念,在内存中的存储位置也不相同,堆一般用于存储可变长度的数据,如字符串类型;而堆栈则用于存储固定长度的数据,如整型类型的数据int(每个int变量占用四个字节)。由数据存储的位置可以得知,当把一个值变量赋给另一个值变量时,会在堆栈中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆位置的两个引用,即在堆栈中保存的是同一个堆的地址。在进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其它变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。

  4.结构和类的区别

  解答

  1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。

  2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。

  3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。

  4.抽象方法和虚方法的区别

  抽象方法

  使用abstract关键字 public abstract bool Withdraw(…);

  抽象方法是必须被派生类覆写的方法。

  抽象方法是可以看成是没有实现体的虚方法

  如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法

  虚方法

  使用virtual关键字 public virtual bool Withdraw(…);

  调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法。

  虚方法可以有实现体

  虚拟方法和抽象方法有什么区别?

  抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

  虚拟方法有实现代码

  抽象方法则没有,

  并且抽象类不能被实例化,只能实例化实现了全部抽象方法的派生类

  抽象方法是虚拟方法的一种

  抽象方法没有实现,它的存在只是为派生类统一接口;派生类应该实现这个方法

  如果编写一个基类,它永远不会被实现,那么就应该将这个类中的一个或多个方法定义为

  抽象方法。

  抽象方法只有声明没有实现,需要在子类中实现;虚拟方法有声明和实现,并且可以在子类中覆盖,也可以不覆盖使用父类的默认实现

  补充一点

  只允许在抽象类中使用抽象方法声明

  学习

  其实大家首先要搞清楚,虚方法与多态性关系密切,虚方法允许派生类完全或部分重写该类的方法,需写方法体。抽象类中可以包含抽象方法与一般的方法,抽象类不可以new,抽象方法只是一个定义,没有方法体,也就是没有{},也不要在里面写内容。它们两个相像的一点是都用override重写

转载于:https://www.cnblogs.com/Jackey_Chen/archive/2009/05/24/1488086.html

C#类和接口、虚方法和抽象方法及值类型和引用类型的区别相关推荐

  1. 重学Java(035)——Java基础知识(类作为成员变量、接口作为成员变量、接口作为方法参数和返回值类型)

    学习内容:三种引用类型用法 一.类作为成员变量 二.接口作为成员变量 三.接口作为方法参数和返回值类型 实际的开发中,引用类型的使用非常重要,也是非常普遍的.我们可以在理解基本类型的使用方式基础上,进 ...

  2. swift string转int_swift中结构体和类的区别(值类型和引用类型的区别)

    在swift中结构体和类有着更多的相同之处,在一般的使用中能够做到互相替换.我们可以先看看官方文档的描述: Unlike other programming languages, Swift does ...

  3. C#类、接口、虚方法和抽象方法-虚拟方法与抽象方法之区别

    虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派生类重写的方法,否则派生类将不能 ...

  4. C#类、接口、虚方法和抽象方法

    C#类.接口.虚方法和抽象方法 虚方法和抽象方法都可以供派生类重写,它们之间有什么区别呢? 1. 虚方法必须有实现部分,并为派生类提供了重写该方法的选项.抽象方法没有提供实现部分,抽象方法是一种强制派 ...

  5. C#类、接口、虚方法和抽象方法-抽象类与接口的区别与联系

    C#抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于抽象类和接口的选择显得比较随意.其实,两者之间还是有很大的区别的.首先,以抽象类的 ...

  6. java虚方法和抽象方法_虚方法和抽象方法--基础回顾

    抽象方法是只有定义.没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写:虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖. 重写的子类虚函数就是被覆盖了. 抽象方 ...

  7. 重写方法,重载方法,虚方法和抽象方法的使用

    重写方法,重载方法,虚方法和抽象方法. 重写:指子类重新实现父类的某些方法,以实现一些新的功能.重写的关键字是override.并且重写的方法其签名是相同的. 重载:指允许类中具有相同函数名的方法,但 ...

  8. 虚方法和抽象方法的区别

    在查阅资料的过程中,偶然看到了虚方法和抽象方法,对其做个小结. 对比学习: 虚方法必须有实现部分,抽象方法不可以有实现部分: 虚方法可以在派生类中重写也可以不重写,抽象方法必须在派生类中重写: 虚方法 ...

  9. C#~虚方法,虚方法和抽象方法的区别

    虚方法 特点: <1>虚方法必须使用virtual修饰 <2>虚方法同抽象方法(adstract)一样使用override关键字重写 <3>虚方法在子类中可以实现, ...

最新文章

  1. 2019最新拼多多Java面试题:幻影读+分段锁+死锁+Spring Cloud+秒杀
  2. 论文浅尝 | 端到端神经视觉问答之上的显式推理
  3. nginx只能访问80端口_nginx 访问不了非80端口
  4. Java 异常处理(标准抛异常、异常处理、多异常、Finally、多线程异常处理、获取异常的堆栈信息、链试异常、自定义异常)
  5. hadoop--MapReduce_WordCount词频统计案例
  6. 创建war类型的maven工程时报web.xml is missing and failOnMissingWebXml is set to true
  7. Git 提交报错,账户和密码错误 和 git add/git commit 文件太大太多
  8. PyTorch 1.0 中文官方教程:使用 PyTorch C++ 前端
  9. Android解包命令:unpackbootimg与打包命令:mkbootimg使用
  10. com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 找不到
  11. mysql多个数据库查询_如何跨多个数据库查询
  12. 公务员报考二级专业目录计算机类,国家公务员考试报考专业(公务员考试二级专业目录)...
  13. wiringPi (C语言) 控制树莓派引脚
  14. 编写优质嵌入式C程序
  15. python重连wifi(windows电脑断网)
  16. 计算机启动项在什么地方找,电脑开机启动项在哪里设置
  17. .net的快递单号自动识别查询api接口demo代码实例(快递鸟案例)
  18. CodeLite 16.0可以编译通过,但是在编辑器界面会显示找不到标准库头文件
  19. java.lang.IllegalAccessException 没有访问权限
  20. C#用easy-mvc开发的后台管理系统

热门文章

  1. l2-006 树的遍历
  2. vue1升级到vue2的问题
  3. struts2.0标签库
  4. Arcengine 基本操作(待更新)
  5. windows phone (12) 小试自定义样式
  6. firefox addons
  7. WinForm:进度条的实现(异步)
  8. 索引原理及项目中如何使用索引实例分析
  9. 计算机硬件技术基础5章在线,《计算机硬件技术基础》试题(D)
  10. html打包成app的缓存问题,webpack 独立打包与缓存处理