20250529-C#知识:静态类、静态构造函数和拓展方法

article/2025/8/20 7:43:41

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、参考资料

  1. 《唐老狮C#》

本篇结束,感想您的阅读~

在这里插入图片描述


http://www.hkcw.cn/article/vGTYGpAVpa.shtml

相关文章

宝塔面板部署python web项目详细教程

最近在学langchain,写了一个小案例出来,我刚好有一台服务器,就尝试自己部署一下项目,结果很幸运一遍过,现在记录一下。我的系统是OpenCloudOS 9 目录 1.安装python解释器版本 2.上传项目文件到宝塔面板 3.添加项目…

女孩晒穿同一件衣服减重43斤的区别 网友:都不像同一个人了

5月29日,江苏一位宝妈在社交平台分享了自己的减肥成果,引发网友关注。该宝妈曾体重超标,减肥成了她生活中的重要目标。在长达一年的时间里,她坚持健康饮食,严格控制热量摄入,拒绝高油高糖食物,增加蔬菜、水果以及优质蛋白的摄取;同时保持规律运动,每天坚持慢跑、跳绳等…

我用Qt+Python实现了个监控QQ消息自动下载文件处理的办公外挂程序

1,背景 公司生产的设备需要进行软件授权后,方可使用。 在合伙人里我负责软件这块,设计了一套授权机制,并管理授权工具。 操作过程很简单:申请人在监控软件上选择设备来申请授权,然后会生成一个申请文件&a…

PortSwigger-04-cors

一:漏洞原理 1、简介 cors简称跨域资源共享:a页面想获取b页面的资源,如果a,b页面的协议、端口号、域名、子域名不相同的,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不…

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025) 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称:MDMCE 2025 大会地点:中国贵阳 审稿通知&#…

游客在新加坡酒店吃榴莲被罚千元:要找专业人清洁房间残留的榴莲味道

5月26日,一位中国游客发视频称其到新加坡旅游,因为在酒店房间里吃榴莲被罚款200元新币(折合人民币1100多元)清洁费。她表示自己是第一次来新加坡旅游,不知道东南亚酒店常见的相关规定。酒店前台称,因为要找专业人士来清洁房间残留的榴莲味道,还需要空置好几天。事后该名…

技术栈ES的介绍和使用

目录 1. 全文搜索引擎(Elastic Search)的由来2. Elastic Search 概述2.1 Elastic Search 介绍2.2 Elastic Search 功能2.3 Elastic Search 特点 3. 安装 Elastic Search3.1 ES 的安装3.2 安装 kibana3.3 ES 客户端的安装 4. Elastic Search 基本概念4.1 …

乘客从胡塞客机上逃离画面!

乘客从胡塞客机上逃离画面。对民航下狠手!以色列炸毁胡塞最后一架客机,乘客纷纷从客机上逃离。而在5月6日,胡塞的客机均被以色列团灭,这是仅剩最后的一架客机,也难逃一劫。对民用航空都下此狠手,可以想象以色列有什么不敢干的?如果当时乘客再晚一步下飞机,后果将不堪设…

11 java语言执行浅析1

Java 是基于线程模型的语言,程序的执行是通过线程来调度和运行的。 一、Java 的最小执行单元:线程(Thread) 每个 Java 程序至少有一个主线程(main thread),它从 main() 方法开始执行。所有代码…

单调栈的例题与代码

首先,我们来看看例题: 给定一个长度为 N 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1 。 输入格式: 第一行包含整数 N ,表示数列长度。第二行包含 N 个整数,表示整数数列…

事务Transaction

事务(Transaction)是数据库管理系统中的一个重要概念,它是一组操作的集合,这些操作要么全部成功,要么全部失败,以确保数据的完整性和一致性。 一、事务的特性(ACID) 原子性&#xf…

RPG改进1.轻击与重击的搭配与连续释放

这一篇做不做都可以,后面视频作者会做的 就比如,当玩家想abaaba/aabaab/ababaa/abababab/aaaba/baabaa等搭配的释放时,可以进行改进。 1.创建动画通知 2.打开攻击的蒙太奇,添加动画通知 3.打开LightAttackMaster,添加变量 4.打开…

MySQL 索引和事务

目录 一:MySQL 索引介绍 1:索引概述 2:索引作用 3:索引的分类 (1)普通索引 (2)唯一索引 (3)主键索引 (4)组合索引&#xff08…

MySQL 数据库操作

目录 一. MySQL 数据库介绍 二. MySQL 库操作 1.系统数据库 2.数据库操作 三. MySQL 表操作 1.表介绍 2.查看表 3.创建表 4.查看表结构 5.修改表 6.复制和删除 四. MySQL 数据操作 1.插入数据 INSERT 2.删除与更新 INSERT 4.查询数据 INSERT 单表查询 1.单表…

郑州首店停工?胖东来方面回应 工程正常对接中

随着于东来此前公布的胖东来郑州首店开业日期(2026年元旦)临近,网友愈发关注该超市的动态。近日,有网友发现该店的建设似乎停工了。跟不久前热热闹闹的地面部分施工现场相比,如今很难见到工人师傅的身影,甚至“中建七局”几个大字已被拆除。这让网友们开始担忧是否能按计…

女子穿高跟鞋跑步摔伤起诉健身房 责任划分引争议

女子穿高跟鞋跑步摔伤起诉健身房 责任划分引争议!一名女子穿着高跟鞋在健身房跑步机上跑步,不久后因跟不上跑步机速度而摔倒,导致十级伤残。她随后起诉健身房要求赔偿。然而,健身房跑步机旁的墙上贴有不能穿高跟鞋跑步的提醒。2024年3月8日,刘娜(化名)穿着高跟鞋进入益阳…

减肥走回家时家人会在路上迎接我

减肥走回家时家人会在路上迎接我。责任编辑:zx0002

沃尔沃高管谈汽车安全:不抢风头,只想多救一命

沃尔沃高管谈汽车安全。4月15日晚,全新一代沃尔沃XC90正式上线,限时尊享价从47.9万元起跳。这台顶着“旗舰SUV”光环的北欧大块头,不但没来啥夸张参数堆料,也没整那些炫酷得让人眼花缭乱的智能化噱头——它依然稳稳地押注在“安全”两个字上,用最不招摇的方式稳扎传统豪华…

主持人李彬因长期服药满头白发面部浮肿,却依旧保持乐观

5月29日,知名主持人李彬罕见露面发视频,视频中李彬满头白发声音沙哑向大家问好。此前,李彬曾自曝生病,需长期服用药物导致面部浮肿,却依旧保持乐观。李彬,出生于河北省衡水市,中国影视演员、主持人,曾主持《超级大赢家》。责任编辑:zx0002

.NET WinForm图像识别二维码/条形码并读取其中内容

需求:图像识别出一张图片中的二维码或者条形码,并读取其中内容。 一、安装库(特别注意,网上很多都没说清楚) 如果是基于.net framework,则安装ZXing.Net(建议0.14.0版本左右,具体看实际,版本太高,部分接口…