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

    }
相关推荐
catchadmin18 分钟前
Laravel12 + Vue3 的免费可商用商业级管理后台 CatchAdmin V5 正式发布
开发语言·php
袁气满满~_~19 分钟前
Python数据分析学习
开发语言·笔记·python·学习
阿蒙Amon28 分钟前
C#每日面试题-常量和只读变量的区别
java·面试·c#
我是唐青枫33 分钟前
C#.NET ConcurrentBag<T> 设计原理与使用场景
c#·.net
寻星探路1 小时前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
程序员小白条1 小时前
面试 Java 基础八股文十问十答第八期
java·开发语言·数据库·spring·面试·职场和发展·毕设
Dxy12393102161 小时前
python连接minio报错:‘SSL routines‘, ‘ssl3_get_record‘, ‘wrong version number‘
开发语言·python·ssl
大王小生1 小时前
C# CancellationToken
开发语言·c#·token·cancellation
listhi5201 小时前
基于C#实现屏幕放大镜功能
开发语言·c#
我叫袁小陌1 小时前
C++多线程全面详解
开发语言·c++