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

C#核心(9)静态类和静态构造函数

前言

我们先前已经了解了静态成员的基本构成,也简单了解了一下静态变量,现在我们就要来看一下静态类和静态构造函数了,这些其实在上一节我已经在例子里有提到过,相信聪明的你甚至已经发现了一些规律。

GPT对c#中静态类和静态构造函数都与静态成员的作用解释如下:

静态类的作用有:

  • 封装一组相关的静态方法,用于处理特定的功能或实现特定的算法。
  • 提供一种将方法组织在一起的方式,使代码更加易于理解和维护。
  • 限制类的实例化,通过强制使用静态成员,可以确保类的使用方式符合设计意图。 

静态构造函数的作用有:

  • 初始化静态成员变量,确保在类的第一个实例被创建之前就能对静态成员进行初始化。
  • 执行与静态成员相关的一次性初始化工作,例如读取配置文件、建立数据库连接等。
  • 控制静态成员的初始化顺序,静态构造函数可以被用来确保静态成员按照特定的顺序进行初始化。

我如果就这样写了你大抵会觉得很抽象,但先别急,且听我慢慢道来。

静态类

概念:用static修饰的类

特点:只能包含静态成员,不能被实例化!

既然不能被实例化了,那意思是啥,还记得我先前给大家说的吗,其实类呢,相当于是一个工具,如果当全场只有这一个类的时候,我们就没有必要去实例化了吧,我们直接调用类里的方法来完成我们想做的事就可以了。 

那我再来概括一下它的作用吧:

  1. 将常用的静态成员写在静态类里,可以方便我们的使用。
  2. 它不能被实例化,更能体现它作为工具的唯一性,方便我们全局调用

举个简单的例子:Console,你可以f12自己进去查看一下。

静态构造函数

概念:在构造函数上加上static修饰

特点:

  1. 静态类和普通类都可以有
  2. 不能使用访问修饰符
  3. 不能有参数
  4. 只会自动调用一次

作用:

在静态构造函数中初始化静态变量,一般来说是用来做属性初始化用的。 

例子

其实讲到这里,你大概已经能明白静态这些东西存在的意义了,就是为了你去设计一个全局只存在唯一一个,而且不想要它直接出现在场景中的东西。

那我们这次的例子就用一个敌人管理器。

using System;
using System.Collections.Generic;public static class EnemyManager
{private static List<Enemy> enemies = new List<Enemy>();static EnemyManager(){InitializeEnemies();}private static void InitializeEnemies(){// 创建敌人对象并添加到敌人列表中,并对属性做一些操作Enemy enemy1 = new Enemy("Enemy 1", 100);Enemy enemy2 = new Enemy("Enemy 2", 200);Enemy enemy3 = new Enemy("Enemy 3", 150);//你想的话,可以在这里对敌人的位置进行一些操作,比如随机生成enemies.Add(enemy1);enemies.Add(enemy2);enemies.Add(enemy3);}//任务一:在此处写一个改变敌人数量的静态方法public static void PrintEnemyNames(){foreach (Enemy enemy in enemies){Console.WriteLine(enemy.Name);}}
}public class Enemy
{public string Name { get; set; }public int Health { get; set; }public Enemy(string name, int health){Name = name;Health = health;}//任务二:在此处添加敌人的死亡状态,通过敌人死亡来减少敌人数量
}public class Program
{static void Main(string[] args){// 使用敌人管理器打印敌人名称EnemyManager.PrintEnemyNames();//模拟一下你完成的任务}
}

我在这个例子中留下了两个任务,希望你能抽时间去写一下,再加强体会一下静态这个概念。

总结

静态的相关东西我们大致就已经讲完了,我们讲这么多其实都是为了unity设计模式中的单例模式服务,这个东西你们在日后做自己的demo的时候会经常使用。

所以请务必熟悉静态相关的知识点。

还是那句话,脚踏实地,一步一个脚印。

请期待我下一篇博客!

我来自佑梦游戏开发,感谢你的关注和订阅!

相关文章:

C#核心(9)静态类和静态构造函数

前言 我们先前已经了解了静态成员的基本构成&#xff0c;也简单了解了一下静态变量&#xff0c;现在我们就要来看一下静态类和静态构造函数了&#xff0c;这些其实在上一节我已经在例子里有提到过&#xff0c;相信聪明的你甚至已经发现了一些规律。 GPT对c#中静态类和静态构造…...

B2002 Hello,World! C++实现

Hello,World! 题目描述 编写一个能够输出 Hello,World! 的程序。 提示&#xff1a; 使用英文标点符号&#xff1b;Hello,World! 逗号后面没有空格。H 和 W 为大写字母。 输入格式 输出格式 样例 #1 样例输入 #1 无样例输出 #1 Hello,World!#include <bits/stdc.h&…...

前端-同源与跨域

一、同源策略 两个网站协议名、域名、端口号有一个不同就是非同源&#xff0c;就是跨域。跨域问题就是浏览器的同源策略造成的。 同源是指协议名、域名、端口号 必须完全一致&#xff01; http 默认端口号是80&#xff0c;https 默认端口号是443 同源策略的限制 一般来说&…...

MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server

1. 异常错误 通过远程客户端访问MySQL服务器时会遇到“Host is not allowed to connect to this MySQL server”的错误提示。 2. 原因 MySQL服务器当前配置不允许来自特定主机的连接尝试。 3. 解决方法 允许远程主机访问MySQL服务器&#xff0c;按照以下步骤操作&#xff…...

详解C语言字符和字符串的输入与输出

字符和字符串的输入与输出 一、字符的输入与输出1.1 字符的输入使用 getchar()使用 scanf() 1.2 字符的输出使用 putchar()使用 printf() 二、字符串的输入与输出2.1 字符串的输入使用 scanf() 输入字符串使用 fgets() 输入字符串 2.2 字符串的输出使用 printf() 输出字符串使用…...

adworld - stack2

adworld - stack2 题目概述&#xff1a;给一个数组(自己控制数组大小和填入的数据)&#xff0c;并进行(展示, 增加, 修改值, 求平均值, 退出)菜单选项 存在后门函数(system(“/bin/bash”))&#xff0c;但是没找到栈溢出的点 没判断数组的边界造成任意地址修改 但是如何准确…...

Python学习从0到1 day28 Python 高阶技巧 ⑤ 多线程

若事与愿违&#xff0c;请相信&#xff0c;上天自有安排&#xff0c;允许一切如其所是 —— 24.11.12 一、进程、线程 现代操作系统比如Mac OS X&#xff0c;UNIX&#xff0c;Linux&#xff0c;Windows等&#xff0c;都是支持“多任务”的操作系统。 进程 进程&#xff1a;就…...

nuget 管理全局包、缓存和临时文件夹

查看文件夹位置 dotnet nuget locals all --list清空数据 # Clear the 3.x cache (use either command) dotnet nuget locals http-cache --clear nuget locals http-cache -clear# Clear the 2.x cache (NuGet CLI 3.5 and earlier only) nuget locals packages-cache -clea…...

linux物理内存管理:node,zone,page

一、总览 对于物理内存内存&#xff0c;linux对内存的组织逻辑从上到下依次是&#xff1a;node&#xff0c;zone&#xff0c;page&#xff0c;这些page是根据buddy分配算法组织的&#xff0c;看下面两张图&#xff1a; 上面的概念做下简单的介绍&#xff1a; Node&#xff1a…...

uniapp 设置安全区域

<!-- 获取安全区域 --> <script setup lang"ts"> import { computed, ref } from vuelet systemType ref(1) // #ifdef APP-PLUS || H5 || APP-PLUS-NVUE systemType.value 1 const { safeAreaInsets } uni.getSystemInfoSync() console.log(safeAre…...

渐进式JavaScript框架Vue 3 入门

目录 前言1. Vue 3 的基础入门1.1 什么是 Vue.js1.2 局部使用 Vue 2. Vue 3 的基本配置2.1 准备 HTML 页面并引入 Vue 模块2.2 创建 Vue 应用实例 3. Vue 的数据绑定与界面渲染3.1 插值表达式 4. 常用指令详解4.1 v-for 指令&#xff1a;列表渲染4.2 v-bind 指令&#xff1a;绑…...

【真题笔记】21年系统架构设计师案例理论点总结

【真题笔记】21年系统架构设计师案例理论点总结 从机器学习定义的灵活性和学习算法的可扩展性,对解释器+管道过滤器+隐式调用进行对比分析!面向对象方法开发软件,建立对象模型+动态模型+功能模型,三者关联关系!数据架构的设计过程包括:数据定义、数据分布、数据管理,三者…...

PostgreSQL的奥秘:深入探究事务与锁的秘密世界

PostgreSQL事务 1. 概述 在数据库系统中&#xff0c;事务&#xff08;Transaction&#xff09;是执行数据库操作的最小逻辑单位。它确保了一组操作的完整性和一致性。事务可以通过显式的 BEGIN、COMMIT 和 ROLLBACK 语句块来控制&#xff0c;也可以在自动提交模式&#xff08…...

Python进行GRPC和Dubbo协议的高级测试

在微服务架构日益流行的今天&#xff0c;分布式系统的复杂性不断增加。GRPC 和 Dubbo 协议作为当今互联网行业中常见的高性能通信协议&#xff0c;已经成为服务之间交互的核心。然而&#xff0c;随着服务调用层次的不断增加&#xff0c;如何有效地测试这两种协议&#xff0c;确…...

全程云OA系统QCPES.asmx存在SQL注入漏洞

免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

从建立TRUST到实现FAIR:可持续海洋经济的数据管理

1. 引言 随着我们对信息管理方式的信任&#xff0c;我们的社会对数字化数据的以来呈指数级增长。为了跟上大数据的需求&#xff0c;通过不断的努力和持续实践&#xff0c;对“good”数据管理方式的共识也在不断发展和演变。 加拿大正在建设国家基础设施和服务以及研究数据管理…...

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆销…...

vs2015QT项目添加多语言翻译总结

一、简介 当软件有国际化的需求时&#xff0c;就需要多语言翻译功能&#xff0c;最常见的语言就是支持中文和英语&#xff0c;本文介绍在vs2015QT环境下&#xff0c;进行国际化翻译的具体流程。 二、多语言翻译实现流程 1.底层实现原理介绍 QT写的客户端软件&#xff0c;能…...

替换OpenTSDB和HBase,宝武集团使用IoTDB助力钢铁设备智能运维

时序数据库 IoTDB 应用于宝武集团全基地钢铁时序数据管理&#xff0c;激活数据资产&#xff0c;赋能大型设备智能运维。 1. 背景概述 宝武装备智能科技有限公司&#xff08;以下简称&#xff1a;宝武智维&#xff09;是中国宝武设备智能运维专业化平台公司&#xff0c;30 余年始…...

MathGPT的原理介绍,在中小学数学教学的应用场景,以及代码样例实现

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下MathGPT的原理介绍&#xff0c;在中小学数学教学的应用场景&#xff0c;以及代码样例实现。MathGPT的核心架构是一个精心设计的多层次系统&#xff0c;旨在有效处理复杂的数学问题。其主要组成部分包括 数学知识图谱…...

丙午年三月三十平镜里

丙午年三月三十平镜里 曾几风流里&#xff0c;皆逝日常中。 莫名春伤寒&#xff0c;妙在岁月功。 儿时不知道&#xff0c;青烟多捉空。 老壮老路上&#xff0c;庭院情境通。 谓花当此季&#xff0c;寻因那刻虹&#xff1f; 虚妄浮云聚&#xff0c;耕种顺序隆。 斯文源村落&…...

告别传统菜单!用SARibbon库为你的Qt应用打造Office风格界面(附高分屏适配)

告别传统菜单&#xff01;用SARibbon库为你的Qt应用打造Office风格界面&#xff08;附高分屏适配&#xff09; 当用户第一次打开你的Qt应用时&#xff0c;第一印象往往决定了他们是否会继续使用。传统的菜单栏界面在2023年看起来已经过时&#xff0c;而类似Office的Ribbon界面则…...

最后37个可用的Lovable CRM私有化部署License名额:含2024最新GDPR+信创双合规配置包

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Lovable CRM系统搭建 Lovable CRM 是一个轻量、可扩展、开发者友好的客户关系管理系统&#xff0c;专为中小团队设计&#xff0c;强调易用性与可定制性的平衡。它基于 Go 语言后端与 Vue 3 前端构建&#xff0…...

MindSpore Transformers 训练任务快速上手

MindSpore Transformers&#xff08;简称 MindFormers&#xff09;是昇思 MindSpore 生态下的大模型训练套件&#xff0c;集成 BERT、GPT、LLaMA、Qwen 等主流 Transformer 模型&#xff0c;提供一键式预训练 / 微调、分布式并行、混合精度、监控可视化能力&#xff0c;适配昇腾…...

软件测试的隐藏晋升通道:从QA到QE再到QP

在软件测试领域&#xff0c;大多数人熟悉的职业路径是纵向的&#xff1a;初级、高级、测试架构师或测试经理。然而&#xff0c;在喧闹的晋升阶梯背后&#xff0c;还隐藏着一条认知门槛更高、价值密度更大的水平进化通道——从QA到QE&#xff0c;最终抵达QP。这不是岗位名称的更…...

OpenClaw 用户通过 Taotoken 快速接入并启用 Agent 工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw 用户通过 Taotoken 快速接入并启用 Agent 工作流 对于使用 OpenClaw 框架构建 AI Agent 的开发者而言&#xff0c;能够灵…...

告别代码阅读障碍:MultiHighlight智能高亮插件提升3倍开发效率

告别代码阅读障碍&#xff1a;MultiHighlight智能高亮插件提升3倍开发效率 【免费下载链接】MultiHighlight Jetbrains IDE plugin: highlight identifiers with custom colors &#x1f3a8;&#x1f4a1; 项目地址: https://gitcode.com/gh_mirrors/mu/MultiHighlight …...

Sora 2生成3分钟以上视频总卡顿、跳帧?:5步精准定位帧间语义断裂点并修复

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;Sora 2生成3分钟以上视频总卡顿、跳帧&#xff1f;&#xff1a;5步精准定位帧间语义断裂点并修复 长时序视频生成中&#xff0c;Sora 2 在输出超过180秒内容时频繁出现视觉跳变、运动不连贯及语义突兀中断&am…...

OpenSSH CVE-2024-6387 漏洞原理与实战修复指南

1. 这不是普通补丁&#xff1a;CVE-2024-6387 是 OpenSSH 里埋了二十年的“定时炸弹”你有没有遇到过这种情况&#xff1a;凌晨三点&#xff0c;监控告警疯狂闪烁&#xff0c;SSH 登录失败率突然飙升到98%&#xff0c;但服务器负载、内存、磁盘一切正常&#xff1b;运维同事反复…...

DAG方法与自变量筛选 【9天实用统计学公益训练营Day3-3】

关注公众号的朋友都知道&#xff0c;郑老师我之前连续4年开设了“30天学会医学统计学”&#xff0c;从理论到实操&#xff0c;一步一步教会大家统计学、SPSS课程。2026年&#xff0c;我们对这门课程进行全新升级&#xff01;课程时间大幅度缩短&#xff0c;内容大幅度提升&…...