• C# 一周入门高级编程之《C#-接口》Day Two


    一、接口是什么

    接口定义和 Java 里面的接口定义基本一致,也是一种声明的对外部的一个接口说明,本质上就是一个函数声明,不能实现,只有继承后重写该接口方法的类才能有作用。这样接口有什么好处呐?接口规定了一个蓝图,但并负责具体实现,具体实现就需要通过继承接口然后方式来实现这个蓝图内部的步骤。当然接口完全是可以用抽象类方式来实现,这里其实也是C#接口的一个特殊功能罢了,不必过于深入纠结。
    在接口里面,我们可以方法和事件,属性不可以写在内部,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的蓝图设计。
    接口的好处就是可以扩展性好,我们可以通过使用不同的实例对象,来扩展当前功能,而不需要去改代码,也就是更好的应对改变,接口的其实就是设计模式的一种演绎。

    二、接口定义

    接口定义需要使用到 interface 关键字,其实和类的实现没有构造函数,同时在接口定义时,默认是public访问属性,当然我们也可以明确指定 public

        public interface Reader
        {
            int GetPath();
            void SetPath(int value);
            void GetContent();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 接口内部成员不能写访问属性
    • 接口内部只能是函数声明,不能有实现

    三、接口继承

    接口继承很简单,也就是说 接口之间也是能继承的,继承后的接口具有之前所有接口的成员,没有继承得访问权限,接口继承可以是多继承,可以是单继承,接口多继承主要是用来增加功能,用组合方式而不是继承方式来实现功能

        public interface Reader
        {
            void GetContent();
        }
    
        public interface Encoder
        {
            void Encode(string content);
        }
    
        public interface ReaderEncoder : Reader, Encoder
        {
            string GetReaderEncodeContent();
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    Reader 是读取数据的,Encoder 是数据编码的,ReaderEncoder 就是加密数据读取的功能

    四、接口使用

    定义好接口之后,我们就去继承接口然后去实现对应的函数,那我们就可以去调用接口的方法,给予实现的类。

    //
    	static void Main()
        {
    		Reader reader = new TextReader();
            reader.GetContent();
        }
    
        public interface Reader
        {
            void GetContent();
        }
    
    	//这里可以从文件读取
        public class TextReader : Reader
        {
            void Reader.GetContent()
            {
                //操作。。。
                Console.Write("从文件读取");
            }
        }
    	
    	//从网络中读取
    	public class NetWorkReader : Reader
        {
            void Reader.GetContent()
            {
                //操作。。。
                Console.Write("从网络中读取");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
  • 相关阅读:
    【C语言】指针的定义、概念和运用
    Java Spring Bean的生命周期 三级缓存
    matplotlib中坐标轴控制总结
    熟悉又陌生的package.json
    Python基础入门笔记
    springboot银行客户管理系统毕业设计源码250903
    SSM进阶-Duubo入门demo整合MyBatis
    【安卓】UI开发入门
    Java基础-JVM:垃圾回收算法与垃圾收集器
    k8s重启节点状态NotReady
  • 原文地址:https://blog.csdn.net/qq_43680827/article/details/123514651