首页 > 编程语言 >c#基础之——接口

c#基础之——接口

时间:2023-01-09 09:45:57浏览次数:39  
标签:调用 c# work 基础 接口 interface model class

1  [serializable]序列化,一般用于载入json文件,model中的一个class(model)这时候类其实就相当于一个数据类型,可以存储从jeson文件中提取出来的各个信息。model之间的子类,model里面的东西,就类似工具箱、数据类型

然后每个信息又相当于类的一个属性,可以直接用,来调用

或者说一个类。可以调佣其中各种属性和方法

 

2、interface 接口用于类(不包含model之间的子类,model里面的东西,就类似工具箱,只是工具。这里的子类是指用来实现功能的子类,例如usercontrol、其它的form。它们实现功能和逻辑,属于control)之间的方法 调用(这样的理解是错的。)

就是其他子类要调用main中的函数的时候,就用接口去实现(降低model间的耦合度)

方法要设置成public

main的class要继承一下interface

子类在调用interface的方法时,interface要作为一个参数传入要调用interface中方法的方法,main中调用这个方法时 ,参数传入用 this

子class和子class之间的函数调用用什么呢,像usercontrol中函数的相互调用,interface吗?

 

(上面的理解感觉都太片面了)

作用就是降低model之家耦合,可以实现任意model间函数的调用。继承interface、函数写入interface,通过interface调用

接口就相当于一个声明,在里面申明——属性、方法、事件(都是public)。但是这些都只是声明,具体实现要派生类去实现。也就是继承这个接口的类,要实现里面所有的声明内容。然后其他的类,就可以通过接口,去调用这个派生类里面接口中声明的函数。

 

具体的使用逻辑:

我是一个类,里面很多得方法,其中一些方法可能其他类也有用到,怎么办呢。这时候:

第一步:创建一个接口,把那些其他类可能用到的我的方法的声明都写进去

第二步:我继承一下这个接口

第三步,其他类就可以通过这个接口来调用我的方法啦。怎么调用呢。因为是我的方法,需要通过我的实例去调用(我的实例(this也是我的实例)转换成接口)。所以它可以先把我当做一个数据类型创建一个我实例。然后它在把我这个分身通过 as 转换成接口。然后直接使用 . 就可以调用了。(接口的实例可以是继承接口的任意一个类)

(这里听起来好像多走了一步对不对,它既然已经在它里面创建了一个我的实例,为什么还要通过接口去调用。我直接通过这个实例然后  . 调用不行吗。是可行的,但是这样耦合度会很高(耦合就是指不同类之间的联系),所以使用接口可以降低耦合,)

接口可以多继承。

class Programfa
{
    static void Main(string[] args)
    {
        IWorker james1 = new James1();//每一个类都可以当做一种数据类型来使用,接口的实例可以是继承接口的任意一个类
        IWorker james2 = new James2();
        James3 james3 = new James3();
        james1.work("设计");
        james2.work("编程");
        james3.work("测试");
        //从这个例子我体会到了有接口的好处,可以想象如果又来了新的员工。
        //如果不采用接口,而是每个员工都有一个单独的类,这样就会容易出错。
        //如果有接口这种协议约束的话,那么只要实现了接口就肯定有接口里声明的方法,我们只需拿来调用。
    }
}
 
public interface IWorker { void work(string s); }
class James1 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James1,我的工作是" + s);
    }
}
class James2 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James2,我的工作是" + s);
    }
}
class James3 : IWorker
{
    public void work(string s)
    {
        Console.WriteLine("我的名字是James1,我的工作是" + s);
    }
}

 

标签:调用,c#,work,基础,接口,interface,model,class
From: https://www.cnblogs.com/joy-chen35/p/17036037.html

相关文章

  • Nacos详解
    Nacos是什么❓  欢迎来到Nocos的世界!组成部分全称描述Nanaming/nameServer即服务注册中心,与SpringCloudEureka的功能类似。coconfiguration即配置......
  • Dockerfile构建镜像
    一、构建Apache镜像cd/opt/#建立工作目录mkdir/opt/apachecdapache/vimDockerfile#基于的基础镜像FROMcentos:7#维护镜像的用户信息MAINTAINERthisisap......
  • Docker的数据管理
    一、管理docker容器中数据管理Docker容器中数据主要有两种方式:数据卷(DataVolumes)和数据卷容器(DataVolumesContainers)。1、数据卷数据卷是一个供容......
  • 解决错误:MISCONF Redis is configured to save RDB snapshots, but is currently not
    早上一上班发现系统登录不上去了,查看后台日志:Caused by: io.lettuce.core.RedisCommandExecutionException: MISCONF Redis is configured to save RDB snapshot......
  • c#定义枚举,获取枚举信息
    c#定义枚举一、枚举定义///<summary>///自动巡检支持的设备类型///</summary>publicenumACS_Type_enum{中控=1,IC卡控制器=......
  • 9.会话跟踪技术(Cookie、Session)
    会话跟踪技术(Cookie、Session)笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)视频教程(P123~P133)会话:用户打开浏览器,访问web服务器的资源,会话建立,......
  • Docker镜像拉取
    安装Nginx#搜索Nginxdockersearchnginx#根据版本选择相应的nginx拉取镜像dockerpullnginx:[版本号]#dockerpullnginx不带版本号默认选择最新的镜像拉取......
  • 【LeetCode数组#5行为模拟】螺旋矩阵II
    螺旋矩阵II力扣题目链接(opensnewwindow)给定一个正整数n,生成一个包含1到n^2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入:3输出:[[1,......
  • macOS 下安装虚拟机鼠标无法使用问题
    问题:macOS下安装VMwarefusion,在虚拟机中安装了centOS,安装好以后,在centOS中鼠标无法使用,但键盘可以正常使用。 解决办法:1)打开“系统偏好设置”->“安全性与隐私”-......
  • vs code .net core Linux下离线安装Nuget包
    本人第一次使用vscode在linux下开发.netcore项目,由于处于内网,无法通过在线安装,所以在遇见离线安装Nuget包时,耗费了一番功夫,网上也没有相关的,最后还是多个思路结合才......