unity的C#学习——静态常量和动态常量的定义与使用
定义常量
在C#中,常量是一种不可改变的量,一旦被定义,其值就不能被修改。C#中有两种类型的常量,静态常量和动态常量。
1、静态常量的定义
静态常量是在编译时就已经确定其值的常量,使用const
关键字定义。由于在编译时就已经确定了值,因此静态常量是不能使用运行时值来初始化的。
静态常量在整个程序执行过程中其值都是不变的,因此使用静态常量可以提高代码的可读性和可维护性。下面是一个静态常量的使用示例:
using System;class Program {const double PI = 3.1415926;static void Main(string[] args) {double r = 2.5;double area = PI * r * r;Console.WriteLine("圆的面积是:" + area);}
}
在上面的示例中,我们使用 const 关键字定义了一个名为 PI 的静态常量,表示圆周率。在 Main 方法中,我们使用这个静态常量计算了一个圆的面积。
2、动态常量的定义
动态常量是在运行时才被初始化的常量,使用readonly
关键字定义。与静态常量不同的是,动态常量的值是在运行时才能确定的。
动态常量一般用于需要在运行时计算值的场合,例如通过读取配置文件等方式来确定常量的值。下面是一个动态常量的使用示例:
using System;class Program {readonly double PI;public Program() {PI = Math.Atan(1.0) * 4;}static void Main(string[] args) {Program p = new Program();double r = 2.5;double area = p.PI * r * r;Console.WriteLine("圆的面积是:" + area);}
}
在上面的示例中,我们使用 readonly 关键字定义了一个名为 PI 的动态常量,表示圆周率。在 Program 类的构造函数中,我们通过 Math.Atan(1.0) * 4 来计算圆周率的值。在 Main 方法中,我们使用这个动态常量计算了一个圆的面积。
看了上面的代码,有人可能会好奇:“定义一个动态常量和定义一个变量有什么区别?”
2.1 动态常量与变量的区别
动态常量和变量都是可以被赋值并存储数据的,但它们在赋值、初始化、使用、存储和生命周期等方面有所不同。
-
赋值和初始化:
变量在定义时可以被初始化,也可以在后面的代码中进行赋值操作。而动态常量必须在构造函数中被初始化赋值,之后其值不能再被修改。 -
使用和存储:
变量的值可以在整个代码块中被多次修改和使用,而动态常量的值只能在其初始化时被赋值一次,并且在整个程序运行过程中其值都是不变的。 -
生命周期:
变量的生命周期在其所在的代码块中,在代码块结束后就会被销毁。而动态常量的生命周期在程序运行过程中,只要程序在运行,动态常量就存在,可以被多次使用。
在实际开发中,动态常量常常用于表示某个固定值,而这个值需要在程序运行时才能计算出来,例如通过读取配置文件来初始化常量。变量则常用于表示程序中的可变状态或数据。
看了上面的内容,有人可能会注意到被标红的 “构造函数”,这又是什么呢?它有什么规则吗?
2.2 动态常量的温床:构造函数
构造函数是一种特殊的方法,用于在创建对象时初始化对象的数据成员。在C#中,每个类都可以拥有一个或多个构造函数,在通过调用new关键字来创建该类的对象时,会自动调用该类的构造函数来初始化对象的数据成员。
在C#中,构造函数有以下规则:
- 构造函数与类同名,没有返回类型,且不能有任何返回语句。
- 如果不显式地定义构造函数,则编译器会自动生成一个默认构造函数,该构造函数不带参数,并将所有的数据成员初始化为默认值。
- 可以重载构造函数,即定义多个同名但参数列表不同的构造函数,以便满足不同的初始化需求。
- 可以在构造函数中调用其他构造函数(即构造函数的重载),但必须使用特殊的语法:使用
this
关键字调用同一个类的其他构造函数,或使用base
关键字调用基类的构造函数(后续介绍)。- 如果在派生类中没有显式地调用基类的构造函数,则编译器会自动调用基类的默认构造函数,如果基类没有默认构造函数,则必须在派生类中显式地调用基类的构造函数。
以下是一个使用构造函数定义动态常量的示例代码:
class MyClass
{private readonly int dynamicConstant;public MyClass(int value){// 在构造函数中初始化动态常量dynamicConstant = value;}public void PrintDynamicConstant(){Console.WriteLine("Dynamic constant value is: " + dynamicConstant);}
}// 使用示例
MyClass obj = new MyClass(42);
obj.PrintDynamicConstant(); // 输出 "Dynamic constant value is: 42"
C#中的构造函数和Python中的
__init__
函数在某种程度上是类似的。
C#中的构造函数是一种特殊的方法,它被用来初始化对象的状态。当一个类被实例化时,构造函数会自动被调用。C#中的构造函数的名称必须与类的名称相同,它可以具有任何访问修饰符(public,private,protected等)。
例如,下面是一个简单的C#类和它的构造函数:
class MyClass {public int myInt;public MyClass(int i){myInt = i;} }
在上面的代码中,构造函数
MyClass(int i)
被用来初始化myInt字段。
与此类似,Python中的__init__方法也是一个特殊的方法,它被用来初始化对象的状态。当一个类被实例化时,__init__方法会自动被调用。__init__方法的名称必须是__init__,它可以接受任何数量的参数,但第一个参数必须是self,表示类实例本身。
例如,下面是一个简单的Python类和它的__init__方法:
class MyClass:def __init__(self, i):self.myInt = i
在上面的代码中,
__init__(self, i)
方法被用来初始化myInt属性。和C#中的构造函数一样,__init__方法也可以具有任何数量和类型的参数,以及任何访问修饰符。
相关文章:
unity的C#学习——静态常量和动态常量的定义与使用
定义常量 在C#中,常量是一种不可改变的量,一旦被定义,其值就不能被修改。C#中有两种类型的常量,静态常量和动态常量。 1、静态常量的定义 静态常量是在编译时就已经确定其值的常量,使用const关键字定义。由于在编译…...

栈----数据结构
栈🔆栈的概念🔆栈的结构🔆栈的实现🔆括号匹配问题🔆结语🔆栈的概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。**进行数据插入和删除操作的一端称为栈顶&am…...

【人人都能读标准】11. 原理篇总结:一个程序的完整执行过程
本文为《人人都能读标准》—— ECMAScript篇的第11篇。我在这个仓库中系统地介绍了标准的阅读规则以及使用方式,并深入剖析了标准对JavaScript核心原理的描述。 我们一路走了很远很远,终于到了本书原理篇的最后一站。 在原理篇中,我们先讲了…...

sheng的学习笔记-IO多路复用,NIO,BIO,AIO
基础概念IO分为几种:同步阻塞的BIO,同步非阻塞的NIO,异步非阻塞AIO,IO多路复用,信号驱动IO(不常用)对于一个network IO,它会涉及到两个系统对象,一个是调用这个IO的proce…...

【Python入门第三十五天】Python丨文件打开
在服务器上打开文件 假设我们有以下文件,位于与 Python 相同的文件夹中。 demofile.txt Hello! Welcome to demofile.txt This file is for testing purposes. Good Luck!如需打开文件,请使用内建的 open() 函数。 open() 函数返回文件对象ÿ…...

jsoup 框架的使用指南
概述 参考: 官方文档jsoup的使用JSoup教程jsoup 在 GitHub 的开源代码 概念简介 jsoup 是一款基于 Java 的 HTML 解析器,它提供了一套非常省力的 API,不但能直接解析某个 URL 地址、HTML 文本内容,而且还能通过类似于 DOM、CS…...

web前端开发和后端开发哪个难度大?
前言 因为涉及到的具体的应用的领域不同,所以说不能简单地说哪一个难,对于前端而言你会感觉到入门会非常的简单,这也是会给许多人一种错觉,前端很简单,但是只能说是在入门理解上是有利于新手的,前端在主要…...
认证与认可之间有什么区别和联系?
认证与认可之间有什么区别和联系? 当今社会,认证与认可已经深入企业的生活,那么认证与认可之间到底有什么区别和联系呢? 认证,是指由认证机构证明产品、服务、管理体系符合相关技术规范、相关技术规范的强制性要求或者…...

【Java|golang】1626. 无矛盾的最佳球队---最长子序列,不连续,二维数组排序
假设你是球队的经理。对于即将到来的锦标赛,你想组合一支总体得分最高的球队。球队的得分是球队中所有球员的分数 总和 。 然而,球队中的矛盾会限制球员的发挥,所以必须选出一支 没有矛盾 的球队。如果一名年龄较小球员的分数 严格大于 一名…...
C++ 八股文(简单面试题)
1.左值 可寻址变量,持久性; 2.右值 没有变量名,不可寻址,短暂性; 3.指针 指向的内存地址,指针变量存储的就是指向的对象的首地址 4.引用 为一个变量起别名,定义引用的时候一定要初始化&a…...

RK3588平台开发系列讲解(显示篇)DP显示调试方法
平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、查看 connector 状态二、强制使能/禁⽤ DP三、DPCP 读写四、Type-C 接口 Debug五、查看 DP 寄存器六、查看 VOP 状态七、查看当前显示时钟八、调整 DRM log 等级沉淀、分享、成长,让自己和他人都能有所收获!😄…...
模拟请求发生跨域问题
参考:传送门 问题产生: Access to XMLHttpRequest at ‘http://test-cms.jinhuahuolong.com/api/pages/list’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resourc…...

Qt实践项目:仿Everything软件实现一个QtEverything
⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…...

WEB网站服务(一)
1.1 Apache网站服务基础1.1.1Apache简介Apache HTTP Server是开源软件项目的杰出代表,基于标准的HTTP网络协议提供网页浏览服务。Apache服务器可以运行在Linux,UNIX,windows等多种操作系统平台中。1.Apache的起源1995年,Apache服务程序的1.0版…...
Python数据分析script必备知识(一)
Python数据分析script必备知识(一) 1.重定向终端输出内容 使生成的结果移动到其他位置 # 重定向, 使生成的结果移动到其他位置 import syssys.stderr = sys.stdoutprint(dir(sys)) # ,,,,,__stderr__, __stdin__, __stdout__,,,,,,# 使用场景:脚本上线时,想要把输出结果…...

初识linux之管道
一、进程间通信的概念大家都知道,进程是具有独立性的,因为一个程序运行起来生成进程时,也会生成它的进程结构体,即PCB,然后然后通过进程结构体中的结构体指针找到它的虚拟地址空间,然后再通过它的页表映射到…...

C++成神之路 | 第一课【步入C++的世界】
目录 一、认识C++ 1.1、关于 C++ 1.2、C++的前世今生 1.2.1、C+...

【面试题】大厂面试官:你做过什么有亮点的项目吗?
大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库前言大厂面试中除了问常见的算法网络基础,和一些八股文手写体之外,经常出现的一个问题就是,你做过什么项目…...

Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决
前言 惯例,收到兄弟求救,关于long类型丢失精度的问题: 存在一个初学者不会,就会有第二个初学者不会,所以我出手。 正文 不多说,开搞。 如题, 后端返回的数据 给到 前端, Long类型数…...

Anaconda虚拟环境的创建方法(命令创建)
虚拟环境介绍: 虚拟环境是一为某个项目创建的专属于它的python包,因此做python项目时,一般一个项目用一个虚拟环境。在实际开发中,如果项目A需要某个包的1.0版本,项目B需要此包的2.0版本。如果没有安装虚拟环境&#…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...