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

C#核心(8) 静态成员

前言

先前我们已经学习了成员变量以及成员属性。

静态成员对于在整个应用程序中共享数据和功能非常有用。它们可以用于跟踪全局状态、共享常量和实现单例模式等。但是需要注意的是,过度使用静态成员可能导致代码变得难以维护和测试,因此应谨慎使用。其中单例模式是unity开发中一种经常使用的模式,方便我们对方法的调用和管理。

既然有了静态成员,就会有静态类和静态构造函数,这里博主准备将静态类和静态构造函数单独作为的一个单独的板块进行讲解。

那就开始进行今天的讲解。

基本概念

静态关键词 static

用static修饰的成员变量,方法属性,等都称为静态成员

特点:直接用类名点出使用

定义和使用

实例

class Test
{static public float Pi=3.1415926f;//定义一个静态的变量public int testInt=100;public static float Circle(float r)//定义一个静态的函数{return Pi*r*r;}
}

使用

public class Program
{public static void Main(string[] args){Test test1 = new Test();Console.WriteLine(Test.Pi);Console.WriteLine(Test.Circle(3));Console.WriteLine(test1.testInt);}
}

特点

  • 程序开始运行时,就会分配内存空间,所以程序开始我们就能直接点出来使用,它与程序同生共死,只有程序结束内存才会被释放

注意事项

  1. 静态函数中不能使用非静态成员变量
  2. 非静态函数可以使用静态成员变量

作用

  1. 常用的唯一量 

  2. 方便使用(不用申明对象就可以使用)

  3. 静态方法一般是常用的唯一的方法申明

常量与静态变量

const可以理解为特殊的static

相同点:都可以通过类名直接点出来使用

不同点:

  1. const必须初始化,不能修改
  2. const只能修饰变量
  3. const一定是写在访问修饰符的后面

场景实例 

这是一个游戏管理器,我们可以看到,他更多的其实就是发挥一个工具的作用,负责管理游戏内的人数。你可以就着这个例子进行一定修改,比如,连入服务器和退出服务器才进行人数修改,当然这肯定涉及到服务器相关的搭建,基础不好的同学可以换一个尝试,仿造博主的例子写一个血量管理器,要求能在受伤的时候扣血,然后血量清零了就打印死亡。

以下的例子我想能帮助你理解静态变量的作用。

using System;public class GameManager
{public const int MAX_PLAYERS = 4;public static int numberOfPlayers = 0;public static void StartGame(){Console.WriteLine("Game started!");Console.WriteLine("Max players: " + MAX_PLAYERS);Console.WriteLine("Number of players: " + numberOfPlayers);}public static int ChangePlayerNum(int number){if (numberOfPlayers+1 <=MAX_PLAYERS&&numberOfPlayers-1>=0) { return numberOfPlayers+=number; }else{Console.WriteLine("不能执行操作");return numberOfPlayers;}}
}public class Program
{public static void Main(string[] args){GameManager.StartGame();GameManager.ChangePlayerNum(1);Console.WriteLine("Number of players: " + GameManager.numberOfPlayers);}
}

总结

静态成员的第一节到这里就讲完了,不要觉得很简单,这一块在unity的开发中使用是非常频繁的,不仅仅是我上述所说的游戏人数游戏血量,有时候有些大量的逻辑数据集中管理也会使用到:比如一个平台跳跃游戏中,可能你需要管理一张地图里的平台数据,那么你也需要一个这样的工具类,静态成员的使用就会很频繁了。

还是那句话,脚踏实地,一步一个脚印,才能写出你想要的游戏。

请期待我的下一篇博客。

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

http://www.lryc.cn/news/481726.html

相关文章:

  • 关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
  • Axios 的 responseType 属性详解及 Blob 与 ArrayBuffer 解析
  • redis集群介绍
  • JDK中常用的包有哪些?
  • 校园官网练习---web
  • MySQL中指定字段的某个值排在前面
  • 【51单片机】I2C总线详解 + AT24C02
  • 直接插入排序法
  • mysql中InnoDB索引与MyISAM索引
  • Redis如何保证数据不丢失(可靠性)
  • 【计网】物理层学习笔记
  • vue链接跳转
  • IP地址是电脑自带的吗?是根据什么而决定的‌
  • JavaFX史上最全教程 - Shape - JavaFX矩形椭圆
  • SpringBoot实现的企业资产管理系统
  • python-读写Excel:openpyxl-(4)下拉选项设置
  • 【C++】详解RAII思想与智能指针
  • Qt 环境实现视频和音频播放
  • 【人工智能训练师】7 大数据处理与应用
  • nginx配置文件介绍及示例
  • 如何在算家云搭建YOLOv5(物体检测)
  • 现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库
  • 使用Element UI实现一个拖拽图片上传,并可以Ctrl + V获取图片实现文件上传
  • 私域流量圈层在新消费时代的机遇与挑战:兼论开源 AI 智能名片、2 + 1 链动模式、S2B2C 商城小程序的应用
  • vxe-vxe-colgroup后端返回数据 对数据进行处理 动态合并分组表头(v-if控制表格渲染(数据请求完成后渲染))
  • ESLint 使用教程(五):从输入 eslint 命令到最终代码被处理,ESLint 中间究竟做了什么工作
  • 【安全测试】sqlmap工具(sql注入)学习
  • YOLOv11融合CVPR[2023]空间和通道重建卷积ScConv模块及相关改进思路|YOLO改进最简教程
  • C++研发笔记13——C语言程序设计初阶学习笔记11
  • html5拖放