C#核心(9)静态类和静态构造函数
前言
我们先前已经了解了静态成员的基本构成,也简单了解了一下静态变量,现在我们就要来看一下静态类和静态构造函数了,这些其实在上一节我已经在例子里有提到过,相信聪明的你甚至已经发现了一些规律。
GPT对c#中静态类和静态构造函数都与静态成员的作用解释如下:
静态类的作用有:
- 封装一组相关的静态方法,用于处理特定的功能或实现特定的算法。
- 提供一种将方法组织在一起的方式,使代码更加易于理解和维护。
- 限制类的实例化,通过强制使用静态成员,可以确保类的使用方式符合设计意图。
静态构造函数的作用有:
- 初始化静态成员变量,确保在类的第一个实例被创建之前就能对静态成员进行初始化。
- 执行与静态成员相关的一次性初始化工作,例如读取配置文件、建立数据库连接等。
- 控制静态成员的初始化顺序,静态构造函数可以被用来确保静态成员按照特定的顺序进行初始化。
我如果就这样写了你大抵会觉得很抽象,但先别急,且听我慢慢道来。
静态类
概念:用static修饰的类
特点:只能包含静态成员,不能被实例化!
既然不能被实例化了,那意思是啥,还记得我先前给大家说的吗,其实类呢,相当于是一个工具,如果当全场只有这一个类的时候,我们就没有必要去实例化了吧,我们直接调用类里的方法来完成我们想做的事就可以了。
那我再来概括一下它的作用吧:
- 将常用的静态成员写在静态类里,可以方便我们的使用。
- 它不能被实例化,更能体现它作为工具的唯一性,方便我们全局调用
举个简单的例子:Console,你可以f12自己进去查看一下。
静态构造函数
概念:在构造函数上加上static修饰
特点:
- 静态类和普通类都可以有
- 不能使用访问修饰符
- 不能有参数
- 只会自动调用一次
作用:
在静态构造函数中初始化静态变量,一般来说是用来做属性初始化用的。
例子
其实讲到这里,你大概已经能明白静态这些东西存在的意义了,就是为了你去设计一个全局只存在唯一一个,而且不想要它直接出现在场景中的东西。
那我们这次的例子就用一个敌人管理器。
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的时候会经常使用。
所以请务必熟悉静态相关的知识点。
还是那句话,脚踏实地,一步一个脚印。
请期待我下一篇博客!
我来自佑梦游戏开发,感谢你的关注和订阅!