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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值