C# 中的接口

简介

官方说明:接口定义协定。 实现该协定的任何 classstruct 必须提供接口中定义的成员的实现。 接口可为成员定义默认实现。 它还可以定义 static 成员,以便提供常见功能的单个实现。 从 C# 11 开始,接口可以定义 static abstract 或 static virtual 成员来声明实现类型必须提供声明的成员。

在C#中使用 interface 关键字来定义接口,例如

 public interface A
 {
     void Test() { }
 }

为什么使用接口

实现多态性

C#中的类只允许有一个父类,但可以继承多个接口。这样一个类可以实现多个接口,从而实现多重继承。这使得一个类具有多种行为,增加了代码的灵活性和可扩展性。

提供契约

接口定义了一组方法的规范,它规定了类应该具有的行为。通过实现接口,类必须遵循接口定义的方法,从而保证了代码的一致性和可靠性。

实现代码的解耦

接口将方法的定义与实现分离开来,使得代码的耦合度降低。通过接口,可以将代码分成多个模块,每个模块只关注自己的功能,从而提高了代码的可维护性和可测试性。

抽象与通用性

接口是一种用来定义程序的协议,描述了某一类或结构的一组相关行为。通过接口,可以更好地实现抽象和通用性,使得不同的事物在同一高度具有通用及可替代性。


综上所述,接口的使用有助于提高代码的可读性、可维护性、可扩展性和可复用性,是软件开发中一种重要的设计模式

C#中接口的特点

1.不能定义实例字段,但可以定义静态类型字段(使用关键字static)。

2.可以定义属性,实例属性不能有默认初始值。静态属性可以有。

3.声明的实例方法可以有默认实现,也可以没有。如果没有默认实现,在其被继承的类中必须实现。如果有默认实现,继承类中可以不实现,编译运行不会报错。但是在构建的实例类对象中不能调用,因为没有在继承类中实现。

4.可以声明定义静态方法。继承类不能直接调用。

说明:接口继承与类继承不同,父类中定义的方法和属性(非私有),继承的子类可以直接使用,并不一定需要重写。但是从接口继承的方法和属性,必须在继承类中实现,才能直接使用类实例对象或类名(静态方法)直接调用接口中定义的方法和属性。

实例

    public interface F
    {
        //编译报错:接口不能包含实例字段
        //int count;

        public static int staCount = 5;

        //编译报错:接口中的实例属性不能具有初始值设定
        //public string Name { get; set; } = "111";

        public string Name { get; set; }

        public static string Age  { get; set; } = string.Empty;

        //继承类必须实现此方法
        void Test1();

        //继承类可以不实现,不会报错,但是需要在继承类实例调用,需要重新实现
        void Test2() { Console.WriteLine("Hello World!"); }

        //编译报错:必须声明主体
        //静态方法必须有实现,哪怕是只有一对{}
        //static void StaTest1();

        //在C#11中(.net 7框架)可以使用关键字abstract, virtual
        //virtual static void StaTest1();

        static void StaTest1() { }

        static void StaTest2() { Console.WriteLine("静态方法"); }

    }

相关推荐

  1. C# 接口

    2024-01-27 10:30:05       32 阅读
  2. C++接口有什么用

    2024-01-27 10:30:05       40 阅读
  3. CMysql基本api接口

    2024-01-27 10:30:05       9 阅读
  4. C#基础】C#IEnumerable<T>接口介绍

    2024-01-27 10:30:05       6 阅读
  5. C# 优雅动态序列化接口返回数据

    2024-01-27 10:30:05       14 阅读
  6. 深入解析C#接口设计原则

    2024-01-27 10:30:05       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 10:30:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 10:30:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 10:30:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 10:30:05       18 阅读

热门阅读

  1. 目标检测中目标的尺寸差异大会存在什么问题?

    2024-01-27 10:30:05       38 阅读
  2. Compose中添加Android原生控件

    2024-01-27 10:30:05       42 阅读
  3. vue3中页面传参汇总

    2024-01-27 10:30:05       40 阅读
  4. sql注入之into outfile语句写入一句话木马

    2024-01-27 10:30:05       41 阅读
  5. 我要成为嵌入式高手之1月26日第十一天!!

    2024-01-27 10:30:05       32 阅读
  6. 04_前后端交互技术之Ajax异步请求

    2024-01-27 10:30:05       28 阅读
  7. RuoYi微服务部署运行报错

    2024-01-27 10:30:05       44 阅读
  8. Midjourney:AI创意的新航程

    2024-01-27 10:30:05       42 阅读
  9. Redis学习指南(23)-Redis的分布式集群插槽的分配

    2024-01-27 10:30:05       32 阅读
  10. Jupyter快捷键的使用 --(编辑模式、命令模式)

    2024-01-27 10:30:05       31 阅读
  11. python实例100第41例:模仿静态变量的用法

    2024-01-27 10:30:05       30 阅读