`

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

    博客分类:
  • C#
阅读更多

1.C#类和接口的区别

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

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

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

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

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

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

PS:接口除了规范一个行为之外,在具体项目中的实际作用也是十分重要的,在面向对象的设计原则以及设计模式的使用中,无不体现作为一个接口的使用好处,最直接的就是设计

原则中OCP(开放封闭原则),我们使用接口,而不需要关心他的具体实现,具体实现的细节变化也无关客户端(使用接口的类)的使用,对与扩展是开放的,我们可以另写一个接口

的实现来扩展当前程序,而不影响上层的使用,但对修改是封闭的,即我们不能够再去修改接口的定义,当然这个“不能够”是指在规范原则上不应该这么做!  

2.抽象类和接口的区别

答:

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

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

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

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

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

4.结构和类的区别
答:
  1) 结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
  2) 对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
  3) 一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。

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

抽象方法

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

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

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

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

虚方法

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

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

虚方法可以有实现体

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

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

虚拟方法有实现代码

抽象方法则没有,

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

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

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

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

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

补充一点

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

学习

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

分享到:
评论

相关推荐

    C#类和接口、虚方法和抽象方法及值类型和引用类型的区别等等.........

    这里有好多比较好的资料,很适合正在学习Java和对Java想进一步了解的朋友. ... 一.C#类和接口、虚方法和抽象方法及值类型和引用类型的区别 二 .C#中 接口与抽象类 的区别 三.浅谈java封装思想 四.抽象类和接口的区别

    C# 中接口与抽象的区别

    接口是引用类型的,类似于类,和抽象类的相似之处有三点:不能实例化;包含未实现的方法声明;派生类必须实现未实现的方法。接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的...

    关于虚方法抽象类的应用

    在编程领域,虚方法和抽象类是面向对象编程中的核心概念,它们对于设计可扩展和灵活的代码架构至关重要。在C#中,这两个概念经常一起使用,以实现多态性,这是一种允许不同对象对同一消息作出不同响应的能力。让我们...

    c#虚方法学习

    在C#编程语言中,虚方法是面向对象编程的一个核心概念,它...在实际开发中,合理地使用虚方法、抽象方法和接口,能够构建出高效、可复用的软件架构。通过“虚方法计算器”这样的实例,你可以更好地理解和应用这些概念。

    细细品味C#(抽象接口委托反射)(转自博客园)

    在C#中,可以使用`override`关键字来重写接口中的虚方法。需要注意的是,接口中的方法默认是抽象的,因此不需要使用`override`关键字来重写。 **抽象类与接口的区别** 抽象类和接口都是用于实现多态的重要工具,但...

    C#继承,接口,多态的实现与区别

    首先,**继承(Inheritance)**是C#中类之间的一种关系,一个类可以继承自另一个类,从而获得被继承类的所有属性和方法。这种关系使得代码复用变得容易,同时还能通过子类扩展或修改父类的行为。在C#中,我们使用`:`...

    细细品味C#(抽象接口委托反射)

    然而,如果一个类同时继承了一个抽象类并实现了接口,那么它可能需要使用`override`来重写抽象类中的虚方法。 ### 委托的理解与应用 #### 委托的基本概念 委托是一种引用类型数据,它定义了方法的类型,使得可以...

    Java,C#,C++在继承,覆盖和多态,抽象类等几个方面的比较归纳

    C++的抽象类还可以包含非虚函数,而Java和C#的抽象方法必须在子类中实现。 在继承树中,接口在Java和C#中扮演重要角色。Java的接口完全是抽象的,不允许有方法实现。C#中的接口也类似,但C#4.0引入了“默认接口实现...

    C#语言视频 虚方法

    在C#编程语言中,虚方法(Virtual Methods)是一个重要的面向对象特性,它允许子类重写父类的方法实现,从而实现多态性。本文将深入探讨虚方法的概念、使用方式以及其在实际开发中的作用。 一、虚方法概念 虚方法在...

    面向对象练习之三--多态 (抽象方法和虚方法)

    抽象类通常包含抽象方法,定义了一个通用的接口,而虚方法则允许子类对这些接口进行具体实现。通过这样的设计,我们可以创建出强大的组件和框架,这些组件和框架可以适应各种各样的场景和需求,而不必对每个特定情况...

    vs2005_winfrom_C#多态和抽象类

    在C#中,多态可以通过虚方法(virtual method)、重写方法(override method)和接口来实现。下面通过具体的代码示例来解释这些概念。 ##### 示例代码解析 ```csharp class A { public virtual void aa() // 1. ...

    超级全的C#MSDN

    * 类实例是引用类型的实例,存储在堆中。 * 结构实例和类实例的生命周期不同,结构实例的生命周期是从创建到方法结束,类实例的生命周期是从创建到垃圾回收。 六、对象标识与值相等性 * 对象标识是对象的唯一...

    C#试题库最全版

    40. 值类型与引用类型:C#中的类是引用类型,结构是值类型。 41. `do-while`循环:至少执行一次循环体。 42. 不规则数组:数组的数组,各子数组长度可以不同。 43. `.aspx`扩展名:ASP.NET Web页面的扩展名。 44...

    老师给的C#类与类之间的调用

    在C#中,多态主要通过虚方法和接口实现。例如,`Person`类可以有一个虚方法`Study()`,在`Student`类中重写它,表现出不同的行为。 6. **组合**(Composition)是将多个类组合成一个更大的类,以实现更复杂的功能。...

    C#面向对象学习心得.txt

    从给定的文件信息来看,该文档主要围绕C#面向对象编程的学习心得展开,涵盖了类、继承、封装、多态等核心概念,并深入探讨了抽象类、接口、静态类、值类型与引用类型、命名空间等内容。下面将对这些知识点进行详细...

    C#语言定义文档中文版.pdf

    值类型包括简单类型、整型、浮点型、布尔型、枚举类型和可以为null的类型等,引用类型则包括类类型、对象类型、动态类型、字符串类型、接口类型、数组类型和委托类型。文档还讲述了装箱和拆箱的概念以及构造类型的...

    Effective C# 中文版改善C#程序的50种方法

    18. **使用虚方法和抽象方法支持多态**:虚方法允许子类重写,抽象方法则必须在子类中实现。 19. **利用强类型避免隐式类型转换**:虽然var简化了代码,但过度使用可能隐藏类型信息,导致错误难以发现。 20. **...

    C#基础知识 c#编程规范 数组

    本文将深入探讨C#的基础知识、编程规范,特别是关于数组的相关内容,同时也涵盖类、接口、虚方法和抽象方法、值类型和引用类型的区别。 首先,C#的基础知识包括变量、数据类型、控制流(如if语句和循环)、函数等。...

    C#标准规范经典

    结构类型是值类型的一种,它们可以包含多个字段和方法。 **4.1.4 简单类型** 简单类型包括整型、浮点型等基本数据类型。 **4.1.5 整型** 整型包括`byte`、`short`、`int`、`long`等。 **4.1.6 浮点型** 浮点型...

    C# / .NET经典题目集锦(带标准答案)--面试必备

    类是同一类对象共同属性和行为的抽象,结构体也是同一类对象共同属性和行为的抽象,但二者有所区别:类是引用类型,而结构体是值类型。类和结构体都可以用来抽象共同的属性和行为,但类可以继承和多态,而结构体不...

Global site tag (gtag.js) - Google Analytics