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

C#-拓展方法

概念:为现有的非静态变量类型,添加方法

语法:

访问修饰符 static 返回值 函数名(this 拓展类名 参数名, 参数类型 参数名,参数类型 参数名....){}

public static void F(this Console()){ }是错的。Console是静态类不可以为静态类添加方法

作用:

  1. 提升程序拓展性

  2. 不需要继承来添加方法

  3. 为别人封装的类型写额外的方法

  4. 不需要在对象中重新写方法特点:

  1. 静态类中的静态方法

  2. 第一个参数,代表拓展的目标类

  3. 第一个参数前面一定要加 this

注意:可以有返回值 和 n个参数,根据需求而定

成员方法是需要实例化对象后才能使用,第一个参数代表声明的该类型的对象。在调用拓展方法时,第一个参数不参与 参数赋值。(示例:为String类型书写拓展方法)

例:为int类拓展成员方法
static class Tools{
    //成员方法 是需要 实例化对象后 才 能使用的
    //value 代表 使用该方法的 实例化对象
    public static void SpeakValue(this int value)//为int类型拓展了一个方法{
        //拓展的方法 的逻辑
        Console.WriteLine("int拓展的方法" + value);
    }
}
----------------------------------
调用拓展方法
int i = 10;//这里的i就是value
i.SpeakValue();
例:为string类拓展成员方法
static class Tools{
    public static void SpeakStringInfo(this string value, string str2, string str3)
      //第一个参数是该类型在实例化是的对象,在调用拓展方法并传参时可以忽略,
    {
        Console.WriteLine("为string拓展的方法");
        Console.WriteLine("调用方法的对象" + value);
        Console.WriteLine("传的参数" + str2 + str3);
    }
}
----------------------------------
调用拓展方法
string str = "000";
str.SpeakStringInfo("小明", "111");
例:为自定义类拓展成员方法
//拓展方法的合集
static class Tools{
    //为自定义的类型拓展方法
    public static void Fun3(this Test t)//注意Test不可以是静态的
    {
        Console.WriteLine("为test拓展的方法");
    }
}
-----------------------
  调用拓展方法
Test t = new Test();//如果拓展方法与其成员方法重名,则只会调用成员方法
t.Fun2();

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

相关文章:

  • 【数学二】线性代数-向量-向量组的秩、矩阵得秩
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十. 多线程控制帧率。循环播放,QT connect 细节,
  • Flutter自定义矩形进度条实现详解
  • 【论文复现】基于图卷积网络的轻量化推荐模型
  • TypeError: can‘t multiply sequence by non-int of type ‘float‘
  • leetcode:杨辉三角
  • iOS开发 swift系列---一个视图数据修改后,如何刷新另外一个视图
  • 多机器人图优化:2024ICARA开源
  • 服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例
  • 火山引擎云服务docker 安装
  • SpringBoot开发——8种读取配置文件信息的方式
  • 基于MPPT最大功率跟踪的光伏发电蓄电池控制系统simulink建模与仿真
  • 【ArcGISPro】单次将自己建立的工具箱添加至Arcpy中
  • C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
  • MySQL limit offset分页查询可能存在的问题
  • FPGA高速设计之Aurora64B/66B的应用与不足的修正
  • 简单介绍一下mvvm mvc mvp以及区别、历史
  • Recyclerview缓存原理
  • Map函数与vector<pair<int,int>>函数的使用方法
  • 将指令输入环境环境变量,用定义的字符串方便快捷调用
  • SpringBoot框架下的资产管理自动化
  • 【ubuntu18.04】使用U盘制作ubuntu18.04启动盘操作说明
  • Node.js——文件上传
  • Sophos | 网络安全
  • Cesium使用flyToBoundingSphere实现倾斜相机视角观察物体
  • VScode建立Java项目