平时在开发时常常会用到 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…