C# 中的接口

简介

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

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

cs 复制代码
 public interface A
 {
     void Test() { }
 }

为什么使用接口

实现多态性

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

提供契约

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

实现代码的解耦

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

抽象与通用性

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

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

C#中接口的特点

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

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

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

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

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

实例

cs 复制代码
    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 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾4 分钟前
EasyExcel使用
java·开发语言·excel
拾荒的小海螺10 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马剑威(威哥爱编程)35 分钟前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
白-胖-子1 小时前
【蓝桥等考C++真题】蓝桥杯等级考试C++组第13级L13真题原题(含答案)-统计数字
开发语言·c++·算法·蓝桥杯·等考·13级
好睡凯1 小时前
c++写一个死锁并且自己解锁
开发语言·c++·算法
java—大象1 小时前
基于java+springboot+layui的流浪动物交流信息平台设计实现
java·开发语言·spring boot·layui·课程设计
yyqzjw1 小时前
【qt】控件篇(Enable|geometry)
开发语言·qt
csdn_kike1 小时前
QT Unknown module(s) in QT 以及maintenance tool的更详细用法(qt6.6.0)
开发语言·qt
JerryXZR1 小时前
JavaScript核心编程 - 原型链 作用域 与 执行上下文
开发语言·javascript·原型模式