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版本。如果没有安装虚拟环境&#…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
