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

时间:2024-11-10 18:45:34

前言

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

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的时候会经常使用。

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

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

请期待我下一篇博客!

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