关于.net:如何在-C-中使用-constreadonlystatic

13次阅读

共计 1622 个字符,预计需要花费 5 分钟才能阅读完成。

平时在开发时常常会用到 const,readonly,static 关键字,能够必定这些关键词是齐全不同的概念,但有时候他们在用法上很类似以至于在场景中不晓得抉择哪一个,这篇文章咱们就来探讨 C# 中的 const,static 和 readonly 关键词,放在一起比拟一下看看如何抉择。

了解 const

const 罕用来定义一个常量,什么意思呢?就是这个常量在你程序的生命周期内都不会被扭转,因而,必须在申明常量时为其赋值,从技术角度上来说:这个常量值又被称为 编译时 值,用 const 定义的变量又被称为 编译时 常量,值得注意的是: 这个常量是不可变的,也就是一旦被定义好之后不能够对其进行批改。

上面的代码片段展现了如何应用 const 去定义这个 编译时 常量。


const string connectionString = "Specify your database connection string here.";

肯定要记住,常量必须在定义的时候给它赋值,同时也要记住不能够用 const 定义 object 类型,因为它只反对 C# 的基元类型,比方:ints, floats, chars, booleans 和 strings,接下来通过一个例子来理解以下为啥不能用 object, 思考上面的 Author 类。


    public class Author
    {public int Id { get; set;}
        public string FirstName {get; set;}
        public string LastName {get; set;}
        public string Address {get; set;}
    }

如果用 const 将 Author 定义为常量的话,编译器必定是不批准的,如下图:

了解 readonly

只读关键词 readonly 罕用于将一个变量或者一个对象设置为只读,意味着这个变量或者对象只能在 类作用域 或者 构造函数 中被第一次赋值,一旦被赋值后,你就不能通过任何办法对其批改,除了构造函数,接下来看一个例子,思考上面的 DbManager 类。


    public class DbManager
    {
        public readonly string connectionString ="Specify your database connection string here.";
        
        public DbManager()
        {connectionString = "You can reassign a value here.";}
        
        public void ReAssign()
        {connectionString = "This is not allowed";}
    }

下面的代码会编译报错,错误信息如下:

了解 static

static 关键词可用于 变量,办法,对象。不过值得注意的是:类中的 static 成员只归属于类,而不是类实例,换句话说,能够间接应用类名来拜访动态属性或者静态方法,而不是通过类实例拜访, 接下来考虑一下 Utility 类。


    public class Utility
    {public static void SomeMethod()
        {//Write your code here}
    }

你不能够通过 类实例 去调用,否则编译器是不会放行的,如下图:

正确的做法如下:


Utility.SomeMethod();

同样的规定也实用于 类中的属性和字段,要想援用类中的动态成员,参考如下语法:


ClassName.Member;

或者


ClassName.Member();

构造函数也能够是动态的,它通常用于初始化类中的动态成员,但要留神动态构造函数中不承受任何参数。

总结

应用 const,readonly,static 的一些教训法令如下:

  • const

如果 变量 在应用程序的生命周期内不会被扭转,请用 const。

  • readonly

如果你不确定这个 变量 前期是否要被批改,但又不心愿其余的类碰它,请用 readonly。

  • static

如果你心愿类成员是属于类型而不是类型的实例,请用 static。

译文链接:https://www.infoworld.com/art…

正文完
 0