【从零开始入门unity游戏开发之——C#篇20】C#面向对象的封装——静态成员(`static`)(静态字段、静态方法、静态属性、静态构造函数、静态类)

news2024/12/25 12:28:41

文章目录

  • 静态成员(`static`)
    • 1、静态成员的特点:
    • 2、为什么可以直接点出来使用?
    • 3、不同的静态成员介绍
      • 3.1. 静态字段
      • 3.2. 静态方法
      • 3.3. 静态属性
      • 3.4. 静态构造函数
      • 3.5. 静态类
    • 4、静态成员的优缺点
      • 优点:
      • 缺点:
    • 5、静态成员的使用场景
    • 6、总结
  • 专栏推荐
  • 完结

静态成员(static

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

1、静态成员的特点:

直接用类名点出使用

类名.静态成员名

2、为什么可以直接点出来使用?

程序中是不能无中生有的。我们要使用的对象,变量,函数都是要在内存中分配内存空间的。之所以要实例化对像,目的就是分配内存空间,在程序中产生一个抽象的对象。

静态成员的特点

  • 程序开始运行时就会分配内存空间。所以我们就能直接使用。
  • 静态成员和程序同生共死。只要使用了它,直到程序结束时内存空间才会被释放。
  • 一个静态成员就会有自己唯一的一个内存小房间,这让静态成员就有了唯一性,在任何地方使用都是用的小房间里的内容,改变了它也是改变小房间里的内容。

3、不同的静态成员介绍

3.1. 静态字段

静态字段是类级别的变量,在所有类的实例之间共享。

public class MyClass
{
    // 静态字段
    public static int staticField = 0;
    
    public void Increment()
    {
        staticField++;  // 可以在实例方法中访问静态字段
    }
}

public class Program
{
    public static void Main()
    {
        MyClass.staticField = 10;  // 通过类名访问静态字段
        Console.WriteLine(MyClass.staticField);  // 输出 10
        
        MyClass obj1 = new MyClass();
        obj1.Increment();  // 静态字段的值会被共享
        Console.WriteLine(MyClass.staticField);  // 输出 11
    }
}

3.2. 静态方法

静态方法是属于类的,而不是实例。你可以通过类名调用静态方法。

public class MathHelper
{
    // 静态方法
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

public class Program
{
    public static void Main()
    {
        int result = MathHelper.Add(5, 3);  // 通过类名调用静态方法
        Console.WriteLine(result);  // 输出 8
    }
}

3.3. 静态属性

静态属性与静态字段类似,但它们提供了更好的封装,允许你在设置或获取值时添加逻辑。

public class Counter
{
    private static int count = 0;
    
    // 静态属性
    public static int Count
    {
        get { return count; }
        set { count = value; }
    }

    public static void Increment()
    {
        count++;
    }
}

public class Program
{
    public static void Main()
    {
        Counter.Count = 5;  // 通过类名设置静态属性
        Console.WriteLine(Counter.Count);  // 输出 5
        
        Counter.Increment();  // 通过静态方法修改静态字段
        Console.WriteLine(Counter.Count);  // 输出 6
    }
}

3.4. 静态构造函数

  • 静态构造函数在类的第一次访问时自动调用。只会自动调用一次。
  • 静态构造函数不接受任何参数,并且不能显式调用。
  • 它通常用于初始化静态字段或执行一次性初始化任务。
  • 不能使用访问修饰符
public class MyClass
{
    // 静态字段
    public static int staticField;

    // 静态构造函数
    static MyClass()
    {
        staticField = 10;  // 初始化静态字段
        Console.WriteLine("静态构造函数被调用");
    }
}

public class Program
{
    public static void Main()
    {
        // 静态构造函数会在第一次访问类的静态成员时被调用
        Console.WriteLine(MyClass.staticField);  // 输出 10,且输出 "静态构造函数被调用"
    }
}

3.5. 静态类

静态类是一种特殊类型的类,所有成员都必须是静态的。静态类不能实例化,也不能包含实例成员。
比如我们一直用的Console就是一个静态类.

public static class Utility
{
    public static void PrintMessage(string message)
    {
        Console.WriteLine(message);
    }
}

public class Program
{
    public static void Main()
    {
        Utility.PrintMessage("Hello, World!");  // 通过静态类调用静态方法
    }
}

4、静态成员的优缺点

优点:

  • 节省内存:由于静态成员是所有实例共享的,它们只会占用一次内存。
  • 全局访问:静态成员可以在整个程序中被访问,适合做全局变量或工具函数。

缺点:

  • 线程安全问题:静态成员是共享的,因此如果多个线程同时访问静态成员,可能会引发线程安全问题。需要小心同步。
  • 无法实例化:静态类不能创建实例,因此无法进行继承或实现接口。

5、静态成员的使用场景

  • 单例模式:静态成员通常用来实现单例模式,确保一个类只有一个实例。
  • 全局常量或配置:静态字段或属性可以用来存储全局常量或配置数据。
  • 工具类:静态方法非常适合用作工具类,提供通用的功能,如数学运算、字符串处理等。

6、总结

  • 静态成员属于类本身,而不是类的实例。
  • 静态字段静态属性在所有实例之间共享。
  • 静态方法静态构造函数用于类级别的操作。
  • 静态成员常用于工具类、全局配置、单例模式等场景。
  • 特点:直接用类名点出来使用(全局性)
  • 生命周期:和程序同生共死。程序运行后就会一直存在内存中,直到程序结束后才会释放,因此静态成员具有唯一性
  • 注意:
    • 静态函数中不能直接使用非静态成员
    • 非静态函数中可以直接使用静态成员

专栏推荐

地址
【从零开始入门unity游戏开发之——C#篇】
【从零开始入门unity游戏开发之——unity篇】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架开发】

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2265283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?

文章目录 前言问题描述问题分析问题解决1.允许所有用户上传驱动文件2.如果是想只上传白名单的驱动 前言 该方法适合永洪BI系列产品,包括不限于vividime desktop,vividime z-suit,vividime x-suit产品。 问题描述 当我们连接数据源的时候&a…

我的JAVA-Web基础(2)

1.JDBC 防止sql注入 2.JSP JSP的基本语法 基本语法是 <% %> Java代码 <% %> 输出变量 可以转换成${变量}的EL表达式 <%! %>定义变量 JSP的基本语法包括以下几个主要部分&#xff1a; 1. 表达式&#xff08;Expression&#xff09; 表达式用于将…

新闻网站的个性化推荐:机器学习的应用

3.1可行性分析 开发者在进行开发系统之前&#xff0c;都需要进行可行性分析&#xff0c;保证该系统能够被成功开发出来。 3.1.1技术可行性 开发该新闻网站所采用的技术是vue和MYSQL数据库。计算机专业的学生在学校期间已经比较系统的学习了很多编程方面的知识&#xff0c;同时也…

IIC驱动EEPROM

代码参考正点原子 i2c_dri:主要是三段式状态机的编写 module iic_dri#(parameter SLAVE_ADDR 7b1010000 , //EEPROM从机地址parameter CLK_FREQ 26d50_000_000, //模块输入的时钟频率parameter I2C_FREQ 18d250_000 //IIC_SCL的时钟频率)( …

【动手学轨迹预测】2.3 场景表征方法

场景表征是指在所有可用的场景信息数据中, 提取出对于预测网络有用的数据, 并将其转换为易于模型学习的数据格式. 对于预测网络来说, 最重要的数据是交通参与者的历史轨迹和地图信息, 表达它们的常见方法有:栅格化和稀疏化 2.1.1 栅格化 多通道表达 如上图所示, 将历史轨迹和…

亚信安全举办“判大势 悟思想 强实践”主题党日活动

为深入学习和贯彻党的二十届三中全会精神&#xff0c;近日&#xff0c;亚信安全举办了 “学习贯彻党的二十届三中全会精神——‘判大势 悟思想 强实践’党日活动”&#xff0c;并取得圆满成功。 本次活动特邀南京市委宣讲团成员、南京市委党校市情研究中心主任王辉龙教授出席。…

医疗大模型威胁攻击下的医院AI安全:挑战与应对策略

一、引言 1.1 研究背景与意义 随着人工智能技术的迅猛发展,医疗大模型作为一种新兴的技术手段,正逐渐渗透到医疗领域的各个环节,为医疗服务的数字化转型带来了前所未有的机遇。从辅助诊断到疾病预测,从个性化治疗方案的制定到医疗资源的优化配置,医疗大模型展现出了巨大…

如何在谷歌浏览器中使用内置翻译功能

谷歌浏览器作为全球最受欢迎的网络浏览器之一&#xff0c;提供了强大且便捷的内置翻译功能。这一功能帮助用户轻松跨越语言障碍&#xff0c;浏览不同语言的网页内容。本文将详细介绍如何在谷歌浏览器中使用其内置翻译功能。 一、启用谷歌浏览器内置翻译功能 1、打开谷歌浏览器…

【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

1.0 help &#xff1f; 帮助指令&#xff0c;查询某个指令的解释、用法、说明等。详情参考博文&#xff1a; 【数据库】6.0 MySQL入门学习&#xff08;六&#xff09;——MySQL启动与停止、官方手册、文档查询 https://www.cnblogs.com/xiaofu007/p/10301005.html 2.0 在cmd命…

基于推理的目标检测 DetGPT

基于推理的目标检测 DetGPT flyfish detgpt.github.io 近年来&#xff0c;由于大型语言模型&#xff08;LLMs&#xff09;的发展&#xff0c;计算机视觉领域取得了重大进展。这些模型使人类与机器之间能够进行更有效、更复杂的交互&#xff0c;为模糊人类与机器智能界限的新技…

概率论 期末 笔记

第一章 随机事件及其概率 利用“四大公式”求事件概率 全概率公式与贝叶斯公式 伯努利概型求概率 习题 推导 一维随机变量及其分布 离散型随机变量&#xff08;R.V&#xff09;求分布律 利用常见离散型分布求概率 连续型R.V相关计算 利用常见连续型分布的计算 均匀分布 正态…

探索 Python编程 调试案例:计算小程序中修复偶数的bug

在 学习Python 编程的过程里&#xff0c;会遇到各种各样的bug。而修复bug调试代码就像是一场充满挑战的侦探游戏。每一个隐藏的 bug 都是谜题&#xff0c;等待开发者去揭开真相&#xff0c;让程序可以顺利运行。今天&#xff0c;让我们通过一个实际案例&#xff0c;深入探索 Py…

Redis 介绍和安装

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Redis 入门介绍 收录于专栏[redis] 本专栏旨在分享学习Linux的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 本章将带领读者进入 Redis 的世…

springboot480基于springboot高校就业招聘系统设计和实现(论文+源码)_kaic

摘 要 信息数据从传统到当代&#xff0c;是一直在变革当中&#xff0c;突如其来的互联网让传统的信息管理看到了革命性的曙光&#xff0c;因为传统信息管理从时效性&#xff0c;还是安全性&#xff0c;还是可操作性等各个方面来讲&#xff0c;遇到了互联网时代才发现能补上自古…

【基础篇】1. JasperSoft Studio编辑器与报表属性介绍

编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器&#xff0c;其中包括三个标签&#xff1a;设计&#xff0c;源代码和预览。 Design&#xff1a;报表设计页面&#xff0c;可以图形化拖拉组件设计报表&#xff0c;打开报表文件的主页面Source&#xff1a;源代码页码&#xff…

【河南新标】豫财预〔2024〕105号-《关于省级政务信息化建设项目支出预算标准的规定》-费用标准解读系列29

2024年12月3日&#xff0c;河南省财政厅发布了《关于省级政务信息化建设项目支出预算标准的规定》豫财预〔2024〕105号。《关于省级政务信息化建设项目支出预算标准的规定 &#xff08;试行&#xff09;》&#xff08;豫财预 〔2020〕81号&#xff09;同时废止。新的豫财预〔20…

导入numpy报错:PyCapsule_Import could not import module “datetime“

背景 docker部署深度学习算法时&#xff0c;安装miniconda报错&#xff0c;报线程错误。 然后在构建镜像时把miniconda装进去没有问题。 然后把环境移进去发现报numpy导入错误 在python解释器尝试导入numpy发现还是报错 尝试重新装numpy&#xff0c;发现没有解决。 网上找解决方…

TANGO与LabVIEW控制系统集成

TANGO 是一个开源的设备控制和数据采集框架&#xff0c;主要用于管理实验室设备、自动化系统和工业设备。它为不同类型的硬件提供统一的控制接口&#xff0c;并支持设备之间的通信&#xff0c;广泛应用于粒子加速器、同步辐射光源、实验室自动化和工业控制等领域。 1. TANGO的核…

利用Circuit JS1再学学电子方面的知识(硬件)

1 电阻器 1.1 电阻并联 每个电阻电压相同&#xff0c;总电流等于各支路电流之和。 并联电阻值 R 1/(1/R11/R2);R约等于90.9 电阻并联后的阻值比最小的一个电阻值都小。 1.2 电阻串联 电阻串联的阻值为各电阻阻值相加。 RR1R2&#xff0c;串联涉及电阻分压。 一般在开关处…

使用Amazon Bedrock的无服务器的智能工作流

使用Amazon Bedrock的无服务器的智能工作流 智能工作流基于用户输入处理不可预见的任务&#xff0c;比如发起API调用。无服务器架构可以高效地管理这些任务和不同的工作负载&#xff0c;而无需维护服务器&#xff0c;从而加快部署速度。 你将学习如何通过使用带有保护措施的智能…