【C#】使用this进行扩展方法以及静态类和静态成员

news2024/11/24 9:00:37

2023年,第30周,第2篇文章。给自己一个目标,然后坚持总会有收货,不信你试试!
本篇文章主要简单讲讲,使用this进行扩展方法以及静态类和静态成员

目录

  • 一、this扩展
    • 1、扩展条件
    • 2、举例代码
  • 二、静态知识点
    • 1、基本概念
    • 2、举例说明
    • 3、静态成员
    • 3.1、静态字段(Static Fields)
    • 3.2、静态属性(Static Properties)
    • 3.3、静态方法(Static Methods)
    • 3.4、静态构造函数(Static Constructors)
    • 3.4、静态事件(Static Events)
    • 3.6、嵌套类型(Nested Types)

在这里插入图片描述

一、this扩展

在C#中,可以通过扩展方法和扩展属性来向现有的类添加新的方法和属性。扩展方法允许我们像调用实例方法一样调用它们,而扩展属性允许我们像使用普通属性一样使用它们。

1、扩展条件

要创建扩展方法和扩展属性,需要满足以下条件:

1)创建一个静态类,并将其标记为static
2)在该类中创建一个静态方法,该方法将是我们要添加到现有类的扩展方法。方法的第一个参数必须使用this关键字标记,并且指定要扩展的类的类型。这个参数表示我们使用扩展方法的实例。
3)对于扩展属性,我们可以通过创建一个静态类和一个静态方法来模拟扩展属性的行为。在方法内部,可以通过方法的名称和参数列表来实现属性的访问和值的返回。

2、举例代码

以下是一个简单的示例,展示了如何使用扩展方法和扩展属性:

// 扩展方法
public static class StringExtensions
{
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
}

// 扩展属性
public static class MathExtensions
{
    public static double PI
    {
        get { return 3.14159; }
    }
}

// 使用扩展方法和属性
public class Program
{
    static void Main(string[] args)
    {
        string str = "Hello, World!";
        Console.WriteLine(str.IsNullOrEmpty()); // 调用扩展方法

        Console.WriteLine(MathExtensions.PI); // 访问扩展属性
    }
}

在上述示例中,我们创建了一个StringExtensions类,其中包含一个扩展方法IsNullOrEmpty,用于字符串的空检查。我们还创建了一个MathExtensions类,其中包含一个扩展属性PI,用于获取圆周率的值。

请注意,要使用扩展方法和扩展属性,需要引入包含这些类的命名空间。在上面的示例中,我们需要引入System命名空间。

二、静态知识点

1、基本概念

1)在C#中,静态类是一种特殊类型的类,它只包含静态成员(静态方法、静态属性、静态字段)并且不能被实例化。
2)静态类不能被用作基类,也不能从它派生出其他类。
3)静态类主要用于提供一组相关的公共功能,不需要实例化该类即可访问这些功能。
4)它们通常用于实现工具类、辅助类或者包含只能由类本身调用的方法。

2、举例说明

以下是一个简单的静态类示例:

public static class MathUtils
{
    public static int Add(int a, int b)
    {
        return a + b;
    }

    public static int Multiply(int a, int b)
    {
        return a * b;
    }
}

1)在上述示例中,MathUtils是一个静态类,它包含了两个静态方法AddMultiply
2)这些方法可以直接通过类名调用,而不需要创建类的实例。
3)使用静态类的好处是可以避免创建实例的开销,并且将相关的功能组织在一个类中,使代码更加清晰和易于维护。
4)此外,静态类中的成员在整个应用程序中都是可用的,无需传递实例参数。
5)需要注意的是,由于静态类不能被实例化,因此静态类的成员只能访问静态成员和常量,不能访问实例成员或非静态成员。
6)静态类的成员是通过类名直接调用的,无需使用实例引用。

总之,静态类是一种只包含静态成员、不能被实例化并且用于组织相关功能的特殊类。它在提供公共功能、避免创建实例开销等方面有着重要作用。

3、静态成员

静态类可以包含以下类型的成员:

3.1、静态字段(Static Fields)

静态字段是静态类中的变量,它们在整个应用程序中只有一个副本。静态字段可以存储共享数据,并在类的所有实例之间共享。它们被标记为static关键字,并且可以通过类名直接访问。

3.2、静态属性(Static Properties)

静态属性用于公开静态类中的数据。它们提供了对私有静态字段的访问,并允许进行读取、写入操作。静态属性定义了一个访问器方法,用于获取和设置属性的值。

3.3、静态方法(Static Methods)

静态方法是静态类中的方法,它们可以直接通过类名调用,而不需要创建类的实例。静态方法不能访问非静态成员,但可以访问同一类中的其他静态成员。

3.4、静态构造函数(Static Constructors)

静态构造函数是静态类中的特殊方法。它们在类被加载时自动调用,用于执行静态成员的初始化操作。静态构造函数没有参数,并且无法手动调用。

3.4、静态事件(Static Events)

静态事件用于在静态类中定义和处理事件。它们与普通事件类似,但只能在静态类范围内访问。

3.6、嵌套类型(Nested Types)

静态类中可以包含其他类、结构体、枚举或接口,使得这些类型在静态类的范围内具有局部性。

总结起来,静态类的成员包括静态字段、静态属性、静态方法、静态构造函数、静态事件以及嵌套类型。这些成员允许在不创建类的实例的情况下直接使用静态类的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/784217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux网络】 网络套接字(三)socket编程_TCP网络程序

目录 TCP网络程序服务端创建套接字并绑定服务端监听服务端获取连接服务器处理请求 客户端客户端创建套接字客户端连接服务器客户端发起请求测试 服务器存在的问题多进程版的TCP网络程序多线程版的TCP网络程序线程池版的TCP网络程序 TCP网络程序总结图 TCP网络程序 服务端 创建…

一站式财务管家工具:Zoho Books审批功能详细介绍

Zoho Books作为一款功能强大的财务管理软件,提供了多种实用的功能,其中审批流程是非常重要的一个。那么,Zoho Books的审批功能是如何实现的呢?本文将为您详细介绍。 1. 什么是审批功能 审批是企业内部重要业务流程中的前置环节&a…

华为数通HCIP-OSPF基础

路由协议 作用:用于路由设备学习非直连路由; 动态路由协议:使路由设备自动学习到非直连路由; 分类: 按照算法分类: 1、距离矢量路由协议;(RIP、BGP) 只交互路由信息…

基于FPGA实现OSD功能

简介 基于FPGA平台实现简单的OSD的功能,对于FPGA实现OSD只能实行简单的画框和文字叠加,如果实现复杂的车道线画框,则没法实现(起码我个人感觉,这个功能没有思路执行)。 FPGA实现OSD功能需要7系列平台,以及VDMA、OSD等Xilinx公司的IP使用(本功能工程采用Vivado2017.4平台…

windows关闭某个进程

一、使用命令 (1)winR键打开命令提示符,输入cmd (2)输入netstat -ano (3)输入taskkill /f /pid 进程ID。例如:taskkill /f /pid 19216 如果成功终止的话,会出现成功&…

Vue+Nodejs 使用WebSocket创建一个简易聊天室

文章目录 一、页面效果二、架构流程三、技术细节1.客户端2. 服务端 一、页面效果 二、架构流程 使用vue编写前端页面&#xff0c;nodejs处理服务端消息&#xff0c;WebSocket进行实时通信 三、技术细节 1.客户端 <template><div><form onsubmit"return…

Ubuntu录屏软件Kazam

1. 安装 1.1. 桌面右键“打开终端” 1.2. 安装kazam这款软件。 sudo apt-get install kazam 2. 使用 2.1. 安装后打开&#xff0c;我们看看这款软件界面还是很友好很简洁的。 2.2. 除了录像我们还可以截图&#xff0c;也可以选择全屏、窗口、区域的方式录制。 2.3. 如果要录…

Hybird app 热更新工作原理

大家对于原生应用和混合应用已经非常熟悉了&#xff0c;这里就不再进行详细的介绍&#xff0c;用通俗易懂的话解释下他们的一些特点。 1、原生应用 在 Android、iOS 等移动平台上利用提供的开发语言、开发类库、开发工具进行 App 软件开发。比如 Android 是用 Java、Eclipse、…

改进的北方苍鹰算法优化VMD参数,最小包络熵、样本熵、信息熵、排列熵(适应度函数可自行选择,一键修改)包含MATLAB源代码...

今天给大家带来一期由改进的北方苍鹰算法(SCNGO)优化VMD的两个参数。 同样以西储大学数据集为例&#xff0c;选用105.mat中的X105_BA_time.mat数据中1000个数据点。没有数据的看这篇文章。西储大学轴承诊断数据处理&#xff0c;matlab免费代码获取 选取四种适应度函数进行优化&…

【开发问题】flink-cdc不用数据库之间的,不同类型的转化

不同的数据库之期间数据类型转化 问题来源与原因解决过程&#xff0c;思路错误&#xff0c;导致各种错误错误思路是什么 正确解决方式&#xff0c;找官网对应的链接器&#xff0c;数据转化 问题来源与原因 我一开始是flink-cdc&#xff0c;oracle2Mysql&#xff0c;sql 我一开…

Hygon海光电脑:window无法对计算机进行,windows无法对计算机进行启动到下一个安装阶段怎么办...

海光CPU电脑安装第2个系统&#xff0c;Windows10LTSC&#xff0c;U盘引导顺利&#xff0c;安装顺利&#xff0c;在最后一步时出错&#xff1a;。 出错提示 Windows10安装过程中提示&#xff1a; windows无法对计算机进行启动到下一个安装阶段的准备。要安装Windows&#xff0…

时空复杂度详解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&#xff0c;一起学习&#xff0c;一起进步&#…

【CAS6.6源码解析】调试Rest API接口

CAS的web层默认是基于webflow实现的&#xff0c;ui和后端是耦合在一起的&#xff0c;做前后端分离调用和调试的时候不太方便。但是好在CAS已经添加了支持Rest API的support模块&#xff0c;添加相应模块即可。 文章目录 添加依赖并重新build效果 添加依赖并重新build 具体添加…

第54步 深度学习图像识别:MLP-Mixer建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;MLP-Mixer MLP-Mixer&#xff08;Multilayer Perceptron Mixer&#xff09;是Google在2021年提出的一种新型的视觉模型结构。它的主要特点是完全使用多层感知机&#xff08;MLP&#xff09;来处理图像&#…

seaborn笔记 pairplot PairGrid

1 数据集 鸢尾花数据集 # Visual Python: Data Analysis > File vp_df pd.read_csv(https://raw.githubusercontent.com/visualpython/visualpython/main/visualpython/data/sample_csv/iris.csv) vp_df 1.1 基本pairplot import seaborn as snsg sns.pairplot(vp_df) …

前端随笔:HTML/CSS/JavaScript和Vue

前端随笔 1&#xff1a;HTML、JavaScript和Vue 最近因为工作需要&#xff0c;需要接触一些前端的东西。之前虽然大体上了解过HTML、CSS和JavaScript&#xff0c;也知道HTML定义了内容、CSS定义了样式、JavaScript定义了行为&#xff0c;但是却没有详细的学习过前端三件套的细节…

2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A:智能手机用户监测数据分析 问题二分类与回归问题Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛初赛 初赛 A&#xff1a;智能手机用户监测数据分析 问题二分类与回归问题Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛初赛】 初赛 A&#xff1a;智能手机用户监测数据分析 问题一Python代码分析 【2023 年第二届…

RocketMQ 5.0 无状态实时性消费详解

作者&#xff1a;绍舒 背景 RocketMQ 5.0 版本引入了 Proxy 模块、无状态 pop 消费机制和 gRPC 协议等创新功能&#xff0c;同时还推出了一种全新的客户端类型&#xff1a;SimpleConsumer。 SimpleConsumer 客户端采用了无状态的 pop 机制&#xff0c;彻底解决了在客户端发布…

SpringBoot原理分析 | Redis集成

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Springboot集成Redis 依赖导入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis<…

九、数据结构——顺序队列中的循环队列

目录 一、循环队列的定义 二、循环队列的实现 三、循环队列的基本操作 ①初始化 ②判空 ③判满 ④入队 ⑤出队 ⑥获取长度 ⑦打印 四、循环队列的应用 五、全部代码 数据结构中的循环队列 在数据结构中&#xff0c;队列&#xff08;Queue&#xff09;是一种常见的线性数据结…