当前位置: 首页 > article >正文

接口/泛型


文章目录

  • 项目地址
  • 一、接口的使用
    • 1.1 仿打印机
    • 1.2 防盗门功能
  • 二、泛型
    • 2.1 单例模式
    • 2.2 泛型方法
    • 2.3 泛型类
    • 2.4 泛型约束
    • 2.5 泛型的应用 (分页功能)
  • 三、反射
    • 3.1 反射获取类的属性和方法
  • 四、三层架构(反射解耦)
    • 4.1 项目结构:
    • 4.2 各个项目之间的引用
    • 4.3 Models层编写


项目地址

  • 教程作者: 灵犀7期
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
C# 8

一、接口的使用

  • 共有的功能和属性 :使用类
  • 独有的功能:设置成接口

1.1 仿打印机

  • 描述:打印机有不同颜色的墨盒,不同大小的纸张
  • 设计: 打印机类, 墨盒的接口,纸张接口
  1. 墨盒接口IInkBox
namespace ConsoleApp6
{
    public interface IInkBox
    {
        string GetColor();
    }
}
  1. 纸张接口IPaper
namespace ConsoleApp6
{
    public interface IPaper
    {
        string GetPaper();
    }
}
  1. 根据接口实现类
//黑色墨盒类
namespace ConsoleApp6
{
    public class BlackInkBox : IInkBox
    {
        public string GetColor()
        {
            return "Black墨盒";
        }
    }
}

//A4纸类
namespace ConsoleApp6
{
    internal class A4Paper : IPaper
    {
        public string GetPaper()
        {
            return "使用A4纸打印";
        }
    }
}
  1. 打印机类,只用在添加各个接口的构造方法就行,然后直接使用接口的方法
namespace ConsoleApp6
{
    public class Printer
    {
        public IInkBox? IIntBox { get; set; }
        public IPaper? IPaper { get; set; }
        public void Print(string content)
        {
            Console.WriteLine($"打印机正在使用{IIntBox?.GetColor()} 和{IPaper?.GetPaper()}打印内容:{content}");
        }
    }
}
  1. 实例化
Printer p1 = new Printer();
p1.IIntBox = new BlackInkBox();
p1.IPaper = new A4Paper();
string content = "我是一只野猪";
p1.Print(content);   

1.2 防盗门功能

  • 将公同的属性和方法写成继承,将独有的功能写成接口


http://www.kler.cn/a/380995.html

相关文章:

  • 03.01、三合一
  • echarts画风向杆
  • 探索 CI/CD 工具的力量
  • java 基于冷热数据分离的思想设计LRU链表
  • API开发:Flask VS FastAPI
  • Android 搭建AIDL Client和Server端,双向通信
  • 界面控件DevExpress WPF中文教程:Data Grid——卡片视图概述
  • 阿里云高并发测试-Redis缓存机制
  • pdf文件预览和导出
  • 鉴源实验室·加密技术在汽车系统中的应用
  • 力扣438——找到字符串中的所有字母异位词
  • stack和queue --->容器适配器
  • Oracle Sql查询和性能优化(持续更新)
  • 掌握 Jest 中的模块模拟:提升单元测试的灵活性与可靠性
  • 【企业微信新版sdk】
  • java.io.FileNotFoundException: Could not locate Hadoop executable: (详细解决方案)
  • JavaCV学习第一课
  • 栈 算法专题
  • SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“
  • 深入探讨 ESPnet AIShell 项目:ASR 脚本 asr.sh 的实现与解析(一)之脚本前564行,定义各种配置项、函数和条件逻辑
  • Oracle 11g DataGuard GAP处理
  • uniapp实现【时间戳转换为日期格式(年-月-日 时-分-秒)】
  • 10款音视频转文字工具体验记!!!
  • docker构建次数过多导致硬盘爆满,清除
  • mysql上课总结(2)(DCL的所有操作总结、命令行快速启动/关闭mysql服务)
  • 【让中国再次伟大】腾讯开源大语言模型Hunyuan-large,支持高达256K文本序列