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

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

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

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

请期待我下一篇博客!

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


http://www.kler.cn/a/392322.html

相关文章:

  • 【MySQL】MySQL函数之JSON_EXTRACT
  • MySQL数据库:SQL语言入门 【下】(学习笔记)
  • 在 Service Worker 中caches.put() 和 caches.add()/caches.addAll() 方法他们之间的区别
  • 《情商》提升:增强自我意识,学会与情绪共处
  • Web安全之SQL注入---基础
  • 深度学习之 LSTM
  • 机器学习——朴素贝叶斯
  • C++ QT 工具日志异步分批保存
  • 英伟达Isaac Manipulator产品体验
  • 【Vue3】知识汇总,附详细定义和源码详解,后续出微信小程序项目(3)
  • Error response from daemon:
  • OCRSpace申请free api流程
  • Power bi中的lookupvalue函数
  • Oracle In子句
  • 每日OJ题_牛客_春游_贪心+数学_C++_Java
  • Spark:背压机制
  • 南山前海13元一份的猪脚饭
  • mysql 几种启动和关闭mysql方法介绍
  • 青少年编程与数学 02-003 Go语言网络编程 18课题、Go语言Session编程
  • 大语言模型:解锁自然语言处理的无限可能
  • 鸿蒙UI开发——实现环形文字
  • 硬件---1电路设计安全要点以及欧姆定律
  • 【月之暗面kimi-注册/登录安全分析报告】
  • 如何在Puppeteer中实现表单自动填写与提交:问卷调查
  • k8s更新
  • 【Element】vue2 el-table scope.row 更改数据,试图没有更新