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

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#中,构造函数有以下规则:

  1. 构造函数与类同名,没有返回类型,且不能有任何返回语句
  2. 如果不显式地定义构造函数,则编译器会自动生成一个默认构造函数,该构造函数不带参数,并将所有的数据成员初始化为默认值。
  3. 可以重载构造函数,即定义多个同名但参数列表不同的构造函数,以便满足不同的初始化需求。
  4. 可以在构造函数中调用其他构造函数(即构造函数的重载),但必须使用特殊的语法:使用this关键字调用同一个类的其他构造函数,或使用base关键字调用基类的构造函数(后续介绍)。
  5. 如果在派生类中没有显式地调用基类的构造函数,则编译器会自动调用基类的默认构造函数,如果基类没有默认构造函数,则必须在派生类中显式地调用基类的构造函数。

以下是一个使用构造函数定义动态常量的示例代码:

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__方法也可以具有任何数量和类型的参数,以及任何访问修饰符。

http://www.lryc.cn/news/41901.html

相关文章:

  • 栈----数据结构
  • 【人人都能读标准】11. 原理篇总结:一个程序的完整执行过程
  • sheng的学习笔记-IO多路复用,NIO,BIO,AIO
  • 【Python入门第三十五天】Python丨文件打开
  • jsoup 框架的使用指南
  • web前端开发和后端开发哪个难度大?
  • 认证与认可之间有什么区别和联系?
  • 【Java|golang】1626. 无矛盾的最佳球队---最长子序列,不连续,二维数组排序
  • C++ 八股文(简单面试题)
  • RK3588平台开发系列讲解(显示篇)DP显示调试方法
  • 模拟请求发生跨域问题
  • Qt实践项目:仿Everything软件实现一个QtEverything
  • WEB网站服务(一)
  • Python数据分析script必备知识(一)
  • 初识linux之管道
  • C++成神之路 | 第一课【步入C++的世界】
  • 【面试题】大厂面试官:你做过什么有亮点的项目吗?
  • Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决
  • Anaconda虚拟环境的创建方法(命令创建)
  • 数据结构——树与二叉树
  • vue后台管理系统
  • spring boot 集成 postgis jar
  • 【Java进阶篇】——反射机制
  • Oracle中含有recover 状态的数据文件环境中,做异机恢复
  • 图像识别模型
  • [零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机
  • MongoDB基础
  • 【Linux】Linux基本指令(下)
  • 基于uniapp+u-view开发小程序【技术点整理】
  • 投稿指南【NO.7】目标检测论文写作模板(初稿)