20250529-C#知识:静态类、静态构造函数和拓展方法
C#知识:静态类、静态构造函数和拓展方法
静态类一般用来编写工具类
1、静态类
- 用static关键字修饰的类
- 一般充当工具类
- 只能包含静态成员,不能包含静态索引器
- 不能被实例化
- 静态方法只能使用静态成员
- 非静态方法既可以使用非静态成员,也可以使用静态成员
static class Tools{static private string name; //静态成员变量public static string[] versions;public static Dog toolDog; //非静态类型的静态成员变量static public int Count => versions.Length; //静态属性//static public int this[int idx]//{//}static Tools() //静态构造{name = "驴子牌工具包";versions = new string[]{ "1.1", "2.1", "3.5"};toolDog = new Dog("波奇"); //非静态类型实例化Console.WriteLine("静态类构造被调用!");}public static string GetDogName() => toolDog.littleName; //静态成员方法 }
2、静态构造函数
- 加了static关键字修饰的构造函数
- 可以出现在静态类和非静态类中
- 不能有访问修饰符
- 不能有参数
- 只会调用一次
- 静态类中的静态构造一般在其成员被使用之前被自动调用
- 非静态类的静态构造一般在实例化对象或使用静态成员之前被自动调用
- 一般用来初始化静态成员变量
static Tools() //静态类中的静态构造函数{name = "驴子牌工具包";versions = new string[]{ "1.1", "2.1", "3.5"};toolDog = new Dog("波奇"); //非静态类型实例化Console.WriteLine("静态类中的静态类构造被调用!");}
static Dog() //非静态类中的静态构造函数{name = "布莱恩";Console.WriteLine("非静态类中的静态类构造被调用!");}
3、拓展方法
- 为非静态类添加方法
- 形式上是静态类中的静态方法
- 语法 访问修饰符 static 返回值 拓展方法名(this 要拓展的类 使用拓展方法的实例化对象, 参数类型 参数1, 参数类型 参数2,…)
- 好处方便给封装好的类添加新的方法,不用修改类代码,不用写一个继承类
//私有拓展private static void Speak2(this Dog dog) => Console.Write("喵喵喵");//公有拓展public static void Speak3(this Dog dog, string word){Console.Write("{0}:", Dog.name); //非静态方法使用静态成员变量dog.Speak1();dog.Speak2(); //调用另外一个拓展方法Console.WriteLine(word);}//为float类型拓展方法public static void MyFunc(this float target) => Console.WriteLine("这是为float拓展的方法");
4、静态成员变量 VS const成员变量
- const成员变量必须初始化,静态成员变量不需要
- const只能修饰变量
- const关键字只能位于访问修饰符后面
5、完整代码示例:
using System.Runtime.CompilerServices;namespace LearnStatic
{static class Tools{static private string name; //静态成员变量public static string[] versions;public static Dog toolDog; //非静态类型的静态成员变量static public int Count => versions.Length; //静态属性//static public int this[int idx]//{//}static Tools() //静态类中的静态构造函数{name = "驴子牌工具包";versions = new string[]{ "1.1", "2.1", "3.5"};toolDog = new Dog("波奇"); //非静态类型实例化Console.WriteLine("静态类中的静态类构造被调用!");}public static string GetDogName() => toolDog.littleName; //静态成员方法//私有拓展private static void Speak2(this Dog dog) => Console.Write("喵喵喵");//公有拓展public static void Speak3(this Dog dog, string word){Console.Write("{0}:", Dog.name); //非静态方法使用静态成员变量dog.Speak1();dog.Speak2(); //调用另外一个拓展方法Console.WriteLine(word);}//为float类型拓展方法public static void MyFunc(this float target) => Console.WriteLine("这是为float拓展的方法");}class Dog{public static string name;public string littleName;public Dog() => Console.WriteLine("非静态类的无参构造被调用");public Dog(string name) => this.littleName = name;static Dog() //非静态类中的静态构造函数{name = "布莱恩";Console.WriteLine("非静态类中的静态类构造被调用!");} public void Speak1() => Console.Write("旺旺旺");}internal class Program{static void Main(string[] args){//Console.WriteLine(Dog.name); //非静态类中的静态类构造被调用! 布莱恩//Console.WriteLine("*************");Dog dog = new Dog(); //非静态类中的静态类构造被调用! 非静态类的无参构造被调用Console.WriteLine("*************");dog.Speak1(); //旺旺旺Console.WriteLine("*************");//调用拓展方法,拓展方法是非静态方法dog.Speak3("你喜欢我写的小说吗?"); //静态类中的静态类构造被调用!//布莱恩:旺旺旺喵喵喵你喜欢我写的小说吗?Console.WriteLine(Tools.toolDog.littleName); //波奇float f1 = 0.36f;f1.MyFunc(); //这是为float拓展的方法}}
}
6、参考资料
- 《唐老狮C#》
本篇结束,感想您的阅读~
相关文章:

20250529-C#知识:静态类、静态构造函数和拓展方法
C#知识:静态类、静态构造函数和拓展方法 静态类一般用来编写工具类 1、静态类 用static关键字修饰的类一般充当工具类只能包含静态成员,不能包含静态索引器不能被实例化静态方法只能使用静态成员非静态方法既可以使用非静态成员,也可以使用静态成员 sta…...

实验设计与分析(第6版,Montgomery)第4章随机化区组,拉丁方, 及有关设计4.5节思考题4.18~4.19 R语言解题
本文是实验设计与分析(第6版,Montgomery著,傅珏生译) 第章随机化区组,拉丁方, 及有关设计4.5节思考题4.18~4.19 R语言解题。主要涉及方差分析,拉丁方。 batch <- c(rep("batch1",5), rep(&quo…...
第十篇:MySQL 实战:数据迁移、分库分表与分区技术指南
随着系统数据量与访问压力的增长,MySQL 单实例常面临性能瓶颈。本篇系统讲解如何进行 数据迁移、分库分表 与 分区表设计,并结合实践案例提供完整的优化思路。 一、MySQL 数据迁移方式 1. 场景分类 场景推荐工具同版本、本地迁移mysqldump、cpibdata跨…...

【吾爱】逆向实战crackme160学习记录(一)
前言 最近想拿吾爱上的crackme程序练练手,发现论坛上已经有pk8900总结好的160个crackme,非常方便,而且有很多厉害的前辈已经写好经验贴和方法了,我这里只是做一下自己练习的记录,欢迎讨论学习,感谢吾爱论坛…...

vue2 + webpack 老项目升级 node v22 + vite + vue2 实战全记录
前言 随着这些年前端技术的飞速发展,几年前的一些老项目在最新的环境下很可能会出现烂掉的情况。如果项目不需要升级,只需要把编译后的文件放在那里跑而不用管的话还好。但是,某一天产品跑过来给你讲要升级某一个功能,你不得不去…...
opengauss 数据库安装主备 非om方式
一. 准备两台服务器 192.168.141.130 --主 192.168.141.131 --备 1.关闭防火墙 systemctl stop firewalld systemctl disable firewalld 2.关闭 selinux 服务 setenforce 0 vim /etc/selinux/config #设置 SELINUXdisabled 3.关闭透明大页 echo never > /sys/kern…...

STM32的HAL编码流程总结(上部)
目录 一、GPIO二、中断系统三、USART串口通信四、I2C通信五、定时器 一、GPIO 1.选择调试类型 在SYS中Debug选择Serial Wire模式 2.选择时钟源 在RCC中将HSE和LSH都选择为内部晶振 3.时钟树配置 4.GPIO配置 在芯片图上选择开启的引脚和其功能 配置引脚的各自属性 5.工…...

深度学习|pytorch基本运算
【1】引言 pytorch是深度学习常用的包,顾名思义,就是python适用的torch包,在python里面使用时直接import torch就可以调用。 需要注意的是,pytorch包与电脑配置、python版本有很大关系,一定要仔细阅读安装要求、找到…...
(自用)Java学习-5.15(模糊搜索,收藏,购物车)
1. 模糊搜索商品功能 前端实现: 通过解析URL参数(如search联想)获取搜索关键字,发送AJAX GET请求到后端接口/product/searchGoodsMessage。 动态渲染搜索结果:若结果非空,循环遍历返回的商品数据ÿ…...

替代 WPS 的新思路?快速将 Word 转为图片 PDF
在这个数字化办公日益普及的时代,越来越多的人开始关注文档处理工具的功能与体验。当我们习惯了某些便捷操作时,却发现一些常用功能正逐渐变为付费项目——比如 WPS 中的一项实用功能也开始收费了。 这款工具最特别的地方在于,可以直接把 W…...

【K8S】K8S基础概念
一、 K8S组件 1.1 控制平面组件 kube-apiserver:公开 Kubernetes HTTP API 的核心组件服务器。 etcd:具备一致性和高可用性的键值存储,用于所有 API 服务器的数据存储。 kube-scheduler:查找尚未绑定到节点的 Pod,并将…...
FEMFAT许可分析的数据可视化方法
随着企业对FEMFAT软件使用的增加,如何有效地管理和分析许可数据成为了关键。数据可视化作为一种强大的工具,能够帮助企业直观地理解FEMFAT许可的使用情况,从而做出更明智的决策。本文将介绍FEMFAT许可分析的数据可视化方法,并探讨…...
打印机无法远程打印?可以本地打印,本地网络打印机设置给异地使用
很多小伙伴常有打印、远程打印的需求,特别是对于电商人、跨境电商、教师、产品经理、实验人员等群体来说掌握这项技能可谓是能够在很多场景下带来便捷,大幅提升做事效率!打印机是家庭和企业经常用到的设备,很多情况下会遇到本地可…...

包含Javascript的HTML静态页面调取本机摄像头
在实际业务开发中,需要在带有摄像头的工作机上拍摄施工现场工作过程的图片,然后上传到服务器备存。 这便需要编写可以运行在浏览器上的代码,并在代码中实现Javascript调取摄像头、截取帧保存为图片的功能。 为了使用户更快掌握JS调取摄像头…...

PCB设计实践(三十一)PCB设计中机械孔的合理设计与应用指南
一、机械孔的基本概念与分类 机械孔是PCB设计中用于实现机械固定、结构支撑、散热及电气连接的关键结构元件,其分类基于功能特性、制造工艺和应用场景的差异,主要分为以下几类: 1. 金属化机械孔 通过电镀工艺在孔内壁形成导电层,…...
deepseek问答记录:请讲解一下torch.full_like()
torch.full_like() 是 PyTorch 中的一个张量创建函数,用于创建一个与输入张量形状相同但所有元素值都填充为指定标量值的新张量。下面详细讲解其用法和特性: 1. 函数签名 torch.full_like(input, fill_value, *, dtypeNone, layoutNone, deviceNone, r…...

【Linux篇章】Linux 进程信号2:解锁系统高效运作的 “隐藏指令”,开启性能飞跃新征程(精讲捕捉信号及OS运行机制)
本篇文章将以一个小白视角,通俗易懂带你了解信号在产生,保存之后如何进行捕捉;以及在信号这个话题中;OS扮演的角色及背后是如何进行操作的;如何理解用户态内核态;还有一些可以引出的其他知识点;…...

多功能秒达开源工具箱源码|完全开源的中文工具箱
源码介绍 完全开源的中文工具箱永远的自由软件轻量级运行全平台支持(包括ARMv8)类似GPT的智能支持高效UI高度集成提供Docker映像和便携式版本支持桌面版开源插件库 下载地址 百度网盘下载 提取码:p9ck ▌本文由 6v6-博客网 整理分享 ▶ 更多…...
如何在腾讯云 OpenCloudOS 上安装 Docker 和 Docker Compose
从你提供的 /etc/os-release 文件内容来看,你的服务器运行的是 OpenCloudOS 9.2。这是一个基于 CentOS 和 RHEL 的开源操作系统,因此它属于 CentOS/RHEL 系列。 关键信息总结 操作系统名称:OpenCloudOS版本:9.2ID:op…...
清理skywalking历史索引
import requests from datetime import datetime, timedelta import os import re# 配置参数 ES_HOST os.getenv("ES_HOST", "http://192.168.0.250:9200") # ES地址 ES_USER os.getenv("ES_USER", "") # 用户…...

用nz-tabel写一个合并表格
用nz-tabel写一个合并表格 <nz-table #basicTable [nzData]"tableSearchStatus.dataList" nzBordered><thead><tr><th>班级</th><th>姓名</th><th>年龄</th><th>电话</th></tr></thead&…...
matlab计算转子系统的固有频率、振型、不平衡响应
可以计算转子系统的固有频率、振型、不平衡响应 MatrixRiccati/code/Dichotomy_1 (2).m , 2210 MatrixRiccati/code/Dichotomy_1.m , 2210 MatrixRiccati/code/RiccatiSY_1.m , 2756 MatrixRiccati/code/Trans1x (2).m , 451 MatrixRiccati/code/Trans1x.m , 451 MatrixRiccat…...

leetcode hot100刷题日记——29.合并两个有序链表
解答: 方法一:递归 递归的边界条件是啥呢? 递归别想那么多具体步骤,考虑大步骤,小的递归自己会去做的 class Solution { public:ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {//递归比较大小//先考虑…...
【机器人】具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation
本文汇总了具身导航的论文,供大家参考学习,涵盖2025、2024、2023等 覆盖的会议和期刊:CVPR、IROS、ICRA、RSS、arXiv等等 论文和方法会持续更新的~ 一、🏠 中文标题版 2025 😆 [2025] WMNav:…...
Windows 安装 WSL2 并运行 Ubuntu 22.04 指南
Windows 安装 WSL2 并运行 Ubuntu 22.04 指南 本文为 Windows 10 和 Windows 11 用户提供从零开始搭建 WSL2 环境的详细指南,涵盖安装 Ubuntu 22.04、自定义存储位置、性能优化以及常见问题排查。无论你是开发者、运维工程师还是 Linux 爱好者,本文将助你…...
AI情感陪伴在医疗领域的核心应用潜力
一、精准情绪监测与干预 多模态情感识别系统 通过整合语音语调分析(降调与语速异常检测抑郁倾向)、微表情捕捉(面部肌肉运动追踪焦虑状态)、生理指标监测(心率变异幅度反映应激水平)等技术,构建…...

【计算机网络】第1章:概述—分组延时、丢失和吞吐量
目录 一、分组延时、丢失 1. 节点处理延时: 2. 排队延时: 3. 传输延时: 4. 传播延时: 5. 节点延时 6. 排队延时 7. 分组丢失 二、吞吐量 三、总结 (一)分组延时 1. 处理延时(Processing Delay) …...
Python Day38
Task: 1.Dataset类的__getitem__和__len__方法(本质是python的特殊方法) 2.Dataloader类 3.minist手写数据集的了解 1. Dataset 类的 __getitem__ 和 __len__ 方法 在 PyTorch (或类似深度学习框架) 中,Dataset 是一个抽象基类&a…...

DeepSeek R1 模型小版本升级,DeepSeek-R1-0528都更新了哪些新特性?
DeepSeek-R1‑0528 技术剖析:思维链再进化,推理性能飙升 目录 版本概览深度思考能力再升级基准测试成绩功能与体验更新API 变动与示例模型开源与下载结语 版本概览 DeepSeek 团队今日发布 DeepSeek‑R1‑0528 —— 基于 DeepSeek V3 Base(2…...
线路板厂家遇到的PCB元件放置的常见问题有哪些?
印刷电路板现在无处不在。尽管大多数人认为这是理所当然的,但工程师和设计师们充分意识到这些电路开发和生产背后的巨大努力。传统的PCB生产涉及复杂的机械和高昂的前期成本,因此必须将制造外包给专业工厂。 说到交货时间,你可能需要几周的时…...