.NET Interface [接口]、abstract【抽象类】

这篇具有很好参考价值的文章主要介绍了.NET Interface [接口]、abstract【抽象类】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接口 Interface
  1. 接口不能被实例化
  2. 接口只能包含方法声明
  3. 接口中的成员包括方法、属性、索引器、事件
  4. 接口中不能包含常量、字段、构造函数、析构函数、静态成员
  5. 接口中的所有成员默认 public,因此接口中不能有private修饰符
  6. 派生类必须实现接口的所有成员
  7. 一个类可以继承多个接口,接口之间用 逗号 隔开
  8. 一个接口可以有多个父接口,实现该接口的类 必须 实现所有 父接口中的所有成员
抽象类 Abstract

1、抽象方法只作声明,而不包含实现,可以看成是没有实现的虚方法
2、抽象类可以但不是必须有抽象属性、抽象方法,但是一旦有了抽象方法,就一定要把这个类 声明成 抽象类
3、抽象类不能实例化
4、具体派生类 必须 覆盖基类的抽象方法
5、抽象派送类可以覆盖基类的抽象方法,也可以不覆盖,则其具体实现派生类不行覆盖它们。

public abstract class A  {
	//属性
	public string Name{get;set;}
	//虚方法
	public virtual string getName()
	{
		return Name;
	}
	//普通方法
	public void setName(string name)
	{
		this.Name=name;
	}
	//抽象方法
	public abstract void E();
}

Public abstract class B:A
{

}

public class C:B
{
    //重写从类A继承的抽象方法。如果类B,自己也定义了抽象方法,则也必须重写。
    //  派生类,必须实现【重写 override】的继承来的所有抽象方法。
	public override void E()
	{
		//code
	}
}
public class Test
{
	static void Main()
	{
		C c=new C();
		c.E();
    }
}

在抽象类中,新增一个方法【是方法,不是抽象方法】,继承类中可以不用任何处理,而对于接口中,新增一个方法【没有方法体】,则需要修改 继承类提供这个方法的方法体。

接口更多的是在系统设计方法发挥作用,主要用于定义模块之间的通信契约

抽象类在代码实现方面发挥作用,可以实现代码的重用
继承类对于两者【接口和抽象类】所涉及的方法实现是不同的,
继承者对于抽象类所定义的抽象方法,可以不用重写【override】,可以延用抽象类的方法【只是此时 也是 抽象类】,
对于接口所定义的方法、属性【属性只声明 { },里面没有get,set】,在继承类中必须给出相应的方法和属性【{set ; get;}】。

Abstract Interface 区别
相同点

1、都可以被继承,接口多继承,抽象类单继承
2、都不能被实例化
3、都可以包含方法声明
4、派生类必须实现未实现的方法

不同点

1、抽象类在定义类型方法【普通方法给出方法体,抽象方法 只是声明】的时候,可以给出方法的实现部分,也可以不给出,而对于接口来说,所定义的方法都不能给出实现
2、abstract基类可以定义字段、属性、方法实现[抽象方法除外]
interface只能定义属性、索引、事件和方法声明,不能包含字段
3、抽象类是一个不完整的类,需要进一步细化
接口是一个行为规范
微软自定义接口总是后面带 able 字样,证明其是表述 【我能做。。。】
4、接口可以被多重实现,抽象类只能被单一继承
5、抽象类更多是定义在一系列紧密相关的类间,
接口大多数是关系疏松,
但都实现某一功能的类中。
6、接口基本上不具备继承的任何具体特点,它仅仅承若了能够调用的方法
7、接口可以支持回调,而抽象类并不具备这种特点
8、abstract是从一系列相关对象中抽象处理的概念,因此反映的是事物内部共性
接口是为了满足外部调用而定义的一个功能约定,因此反映是事物外部的特点
9、抽象类实现具体方法默认虚的【virtual】,但实现接口的类中的接口方法却默认非虚的,当然也可以声明虚【virtual】的
10、抽象类不能被实例化(但是抽象类中可以有构造函数),只能通过派生类进行实例化

抽象方法与虚方法的区别:
抽象方法必须定义在一个抽象类中,虚方法没有特殊要求
抽象方法在基类中不可以有具体的实现,而虚方法在基类中必须有具体的实现
抽象方法要求必须在派生类中对其进行重写;而虚方法可以在派生类中对其进行重写,也可以不对其进行重写
抽象类与接口的相同点:
都可以被继承
都不可以实例化
都可以包含方法声明
派生类都必须实现其未实现的方法
抽象类与接口的区别:
抽象类可以定义字段、属性,可以包含方法的实现,可定义的内容与非抽象类基本一致;而接口只能定义属性、索引器、事件和方法声明,不能包含字段和方法实现
抽象类是一个不完整的类,需要进一步细化扩展;而接口是一个行为规范
抽象类更多的是定义在一系列紧密相关的类之间;而接口大多数是关系疏松但都实现某一功能的类中
抽象类是从一系列相关对象中抽象出来的概念, 因此反映的是事物的内部共性;接口是为了满足外部调用而定义的一个功能约定, 因此反映的是事物的外部特性
接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法
可以用于支持回调,而继承并不具备这个特征
抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的
如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法文章来源地址https://www.toymoban.com/news/detail-448502.html

到了这里,关于.NET Interface [接口]、abstract【抽象类】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 抽象工厂模式(Abstract Factory)

    抽象工厂模式(Abstract Factory)

    抽象工厂是一种 创建型设计模式 ,它能 创建一系列相关的对象,而无需指定其具体类 。 1. 问题 假设你正在开发一款家具商店模拟器。你的代码中包括一些类,用于表示: 一系列相关产品,例如椅子(Chair)、沙发(Sofa)和咖啡桌(CoffeeTable) 系列产品的不同变体,例如你

    2024年02月11日
    浏览(8)
  • 抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式(Abstract Factory Pattern)

    回顾工厂方法设计模式的不足:具体产品增加时,系统中类的个数将成对增加,在一定程度上增加了系统的复杂度 产品等级结构:产品等级结构即产品的继承结构,即抽象产品与具体产品 产品族:在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构

    2024年02月02日
    浏览(9)
  • 抽象工厂模式-Abstract Factory Pattern

    抽象工厂模式-Abstract Factory Pattern

    原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 首先我们由一个实际问题来引出抽象工厂模式。 考虑这样一个场景,系统中需要向OSS上传文件,以及通过OSS下载文件。而在系统中有不同的业务在使用这两个功能。如下图: 伪代码如下

    2024年02月20日
    浏览(8)
  • 设计模式——抽象工厂模式(Abstract Factory Pattern)

    设计模式——抽象工厂模式(Abstract Factory Pattern)

    概述        抽象工厂模式的基本思想是将一些相关的产品组成一个“产品族”,由同一个工厂统一生产。在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工

    2024年02月03日
    浏览(16)
  • C++11 设计模式4. 抽象工厂(Abstract Factory)模式

    C++11 设计模式4. 抽象工厂(Abstract Factory)模式

    从前面我们已经使用了工厂方法模式 解决了一些问题。 现在 策划又提出了新的需求:对于各个怪物,在不同的场景下,怪物的面板数值会发生变化,     //怪物分类:亡灵类,元素类,机械类     //战斗场景分类:沼泽地区,山脉地区,城镇。 那么就有9类怪物====沼泽地

    2024年04月14日
    浏览(10)
  • 设计模式-创建型模式之抽象工厂模式(Abstract Factory)

    设计模式-创建型模式之抽象工厂模式(Abstract Factory)

    在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要 一个工厂可以提供多个产品对象 ,而不是单一的产品对象。 为了更

    2023年04月20日
    浏览(14)
  • C++ 语言类 (class) 和抽象数据类型 (abstract data type)

    在 C++ 语言中,我们使用类定义自己的数据类型。通过定义新的类型来反映待解决问题中的各种概念,从而使得程序更加简洁旦易于修改。数据抽象能帮助我们将对象的具体实现与对象所能执行的操作分离开来。 类的两项基本能力:一是数据抽象,即定义数据成员和函数成员

    2023年04月10日
    浏览(10)
  • Python 抽象属性中发生的错误 TypeError: Can‘t instantiate abstract class XXX with abstract methods xxx

    本篇文章我们介绍一个和抽象属性相关的错误, TypeError: Can’t instantiate abstract class Bike with abstract methods mileage 。 然后将介绍使用 abc 或抽象基类模块在 Python 中创建具有抽象属性的类。 如果在我们写代码的过程中产生了错误 TypeError: Can’t instantiate abstract class XXX with abstract

    2024年02月06日
    浏览(6)
  • class<T extends interface> 或 class<T extends abstract class>

    Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 类型通配符一般是使用 ? 代替具体的类型参数 要声明一个有界的类型参数,首先列出类型参数的名称,后跟extends,最后紧跟它的上界

    2024年02月12日
    浏览(8)
  • 设计模式-抽象工厂模式(Abstract Factory Pattern)结构|原理|优缺点|场景|示例

     目录         设计模式(分类)        设计模式(六大原则)        创建型         工厂方法         抽象工厂模式        单例模式        建造者模式        原型模式      结构型         适配器模式        装饰器模式      

    2024年04月22日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包