美文网首页
46.C# 接口

46.C# 接口

作者: 技术老小子 | 来源:发表于2024-03-15 05:51 被阅读0次

摘要


C#接口定义了所有类继承接口时应遵循的语法约定。接口定义了语法约定 "是什么" 部分,派生类定义了语法约定 "怎么做" 部分。

正文


接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。抽象类在某种程度上与接口类似,但是,它们大多是由基类的派生类。

1.接口本身并不实现任何功能。

2.抽象类不能直接实例化。

image.png

定义接口语法:

接口命名通常以 I 字母开头,例如IAction。

public interface IAction
{
    bool Start();
    bool Stop();
}

接口成员,不允许使用 public、private、protected、internal 访问修饰符,不允许使用 static、virtual、abstract、sealed 修饰符。不能定义字段,定义的方法不能包含方法体。

定义一个Material 接品

public interface IMaterial
{
    string Name { get; set; }

    string Mlfb { get; set; }

    bool Start();
    bool Stop();
}

实现

接口的实现与类的继承语法格式类似,就是重写了接口中的方法。

定义一个Plc类,继承了接口

internal class Plc : IMaterial
{
    public string Name { get; set; }
    public string Mlfb { get; set; }

    public bool Start()
    {
        Console.WriteLine($"{this.Name} Start");
        return true;
    }

    public bool Stop()
    {
        Console.WriteLine($"{this.Name} Stop");
        return true;
    }
}

调用

//通过类声明
Equipment equipment=new Equipment();
equipment.Name = "S7-1200";
equipment.Start();
equipment.Stop();

//通过接口声明
IMaterial equipment1 = new Equipment();
equipment1 .Name = "S7-1500";
equipment1 .Start();
equipment1 .Stop();

image.png

多态

使用接口实现多态 需要满足以下两个条件。

定义接口并使用类实现了接口中的成员。

创建接口的实例指向不同的实现类对象。

再定义一个Motor类,同样继承IMaterial接口

internal class Motor : IMaterial
{
    public string Name { get; set; }
    public string Mlfb { get; set; }

    public bool Start()
    {
        Console.WriteLine($"{this.Name} Start");
        return true;
    }

    public bool Stop()
    {
        Console.WriteLine($"{this.Name} Stop");
        return true;
    }
}

调用

//通过接口声明
IMaterial material1 = new Plc();
material1.Name = "S7-1500";
material1.Start();
material1.Stop();

//通过接口声明
IMaterial material2 = new Motor();
material2.Name = "S120";
material2.Start();
material2.Stop();

image.png

修改Plc类,将两个方法设置成virtual

internal class Plc : IMaterial
{
    public string Name { get; set; }
    public string Mlfb { get; set; }

    //申明成虚方法
    public virtual bool Start()
    {
        Console.WriteLine($"{this.Name} Start");
        return true;
    }

    public virtual bool Stop()
    {
        Console.WriteLine($"{this.Name} Stop");
        return true;
    }
}

再声明一个S71200类

internal class S71200 : Plc
{
    public override bool Start()
    {
        Console.WriteLine("我是1200,运行中...");
        return true;
    }
}

同样通过接口声明实例化

//通过接口声明
IMaterial material3 =new S71200();
material3.Name = "1217";
material3.Start();
material3.Stop();

image.png

抽像类与接口区别

  • 抽象类可以有实例成员,接口则不能。
  • 抽象类不能多继承,接口还是可以的。
  • 抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
  • 抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
  • 此外接口不能包含字段、构造函数、析构函数、静态成员或常量。(在新的版本中已经不是绝对的了,C# 8.0后可以用static成员了)

相关文章

  • 接口接口接口

    发现很多朋友对于接口都很纠结,阐述一下个人对接口的理解。 接口分为很多种类型,程序语言内部接口 移动端和服务端接口...

  • Android常用接口

    不知名接口 头条接口: 科技接口: 财经接口: 军事接口: 体育接口: 房产接口: 足球接口: 娱乐接口: 电影接...

  • 第十八天 微信微博天气接口

    分享接口 微信接口 微博接口 天气接口 mob接口

  • 接口测试概述

    接口(interface)的概念 常见接口名词 接口测试: 接口测试目的: 接口测试的重要性: 接口测试流程 接口...

  • 接口测试

    接口测试概念: 接口:接口是为了提供一种服务 所有的接口统称为API,接口分为内部接口和外部接口 外部接口:测试被...

  • 接口

    接口 接口类型 空接口 接口嵌套 接口断言 type关键字

  • 线程池原理

    Callable 接口 Runnable 接口 Future接口 RunnableFuture 接口 Future...

  • JMeter-一个接口的返回值作为输入传给其他接口

    背景: 在用JMeter写接口case,遇到一种情况,接口1查看列表接口,接口2查看详情接口,接口2需要传入接口1...

  • 用户操作接口

    登陆 接口地址 获取列表 接口地址 删除 接口地址 批量删除 接口地址 编辑用户 接口地址 添加用户 接口地址

  • JAVA中的集合框架 List (二)

    Collection接口List接口简介 Collection接口、子接口及其实现类,Collection接口是j...

网友评论

      本文标题:46.C# 接口

      本文链接:https://www.haomeiwen.com/subject/cafgzdtx.html