Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:csharp:常量

C# 常量

数据类型相关,看是不是引用类型


C#中的const和readonly

C#不同于C++的是,一般的类都是引用类型,相当于只是一个地址,使用const修饰一个对象(这样看起来很正常的操作)在C#中是错误的,因为在编译阶段,地址是不能确定的,在运行时才是真正地分配内存,自然不能使用const,相对应的是,值类型都是可以正常使用const的。

C#中使用readonly实现只读的限制,readonly用于修饰成员变量,值类型和引用类型都可以使用,readonly修饰的成员变量,可以在声明时赋值,也可以在构造函数里面赋值,readonly的修饰的变量,不像const那样限制调用非const函数,只是限制这个被修饰的值本身的值不能被改变而已(不能被赋值,不能更改引用,也就是这个指针不能更改指向的位置了),其自身包含的各种成员值都是允许修改的,函数调用也没有限制。

using Vector = System.Collections.Generic.List<float>;
 
class Application
{
    // readonly 可以先不赋值,和const不一样
    readonly int x;
    readonly Vector y;
 
    // readonly 可以直接在声明的位置赋值
    readonly Vector z = new Vector(); 
 
    // const 可以使用
    const int a = 0;
 
    // const 不可以使用
    // const Vector b = new Vector();
 
    public Application()
    {
        // readonly 在构造函数里面赋值
        x = 0;
        y = new Vector();
    }
 
    // 在一个普通的函数内部
    public void SomeMethod()
    {
        // readonly 不能赋值
        // x = 1;
 
        // readonly 可以对本身的数据进行操作
        y.Add(0);
 
        // const 正常
        const int c = 0;
 
        // const 引用类型还是不能使用,还是那个原因
        // const Vector d = new Vector();
 
        // readonly 不能修饰局部变量
        // readonly int xx = 0;
 
        // readonly 不能修饰局部变量,只能用于成员变量
        // readonly Vector yy = new Vector();
    }
 
    static void Main()
    {
 
    }
}
/var/www/DokuWikiStick/dokuwiki/data/pages/程序/csharp/常量.txt · Last modified: 2022/11/23 07:56 by zh