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("静态方法"); }

    }
相关推荐
向哆哆31 分钟前
Java应用程序的跨平台性能优化研究
java·开发语言·性能优化
free-elcmacom1 小时前
C语言番外篇(3)------------>break、continue
c语言·开发语言
卑微的小鬼1 小时前
Go 语言结合 Redis 实现固定窗口、滑动窗口、令牌桶和漏桶限流算法的示例代码
开发语言·redis·golang
ylfhpy2 小时前
Python常见面试题的详解16
开发语言·python·面试
handsomestWei2 小时前
java实现多图合成mp4和视频附件下载
java·开发语言·音视频·wutool·图片合成视频·视频附件下载
宝哥的菜鸟之路2 小时前
Python 数据分析概述 ①
开发语言·python·数据分析
全栈若城2 小时前
03 Python字符串与基础操作详解
java·开发语言·python
honghongstand2 小时前
代码随想录D52-53 图论 Python
开发语言·python·图论
过客猫20222 小时前
使用 deepseek实现 go语言,读取文本文件的功能,要求支持 ascii,utf-8 等多种格式自适应
开发语言·后端·golang
程序媛-徐师姐3 小时前
基于 Python Django 的校园互助平台(附源码,文档)
开发语言·python·django·校园互助·校园互助平台