Const字段或get属性

本文关键字:属性 get 字段 Const | 更新日期: 2023-09-27 18:05:06

第一种和第二种定义的区别是什么?

//1
private static string Mask
{
   get { return "some text"; }
}
//2 
private const string Mask  = "some text"; 

第一种方法和第二种方法有哪些好处?

Const字段或get属性

只要它们是私有的,它们可能会被优化成或多或少相同的代码。如果它们是公共的,并从其他程序集使用,则是另一回事。

const变量将在其他程序集中使用const表达式替换/内联。这意味着如果您更改表达式,则需要使用const表达式重新编译每个程序集。另一方面,每次使用属性解决方案都会给您带来方法调用开销。

基本上const字段值在编译时求值,仅在声明时初始化。同样重要的一点是,它们存储在assembly metadata中,所以当你在客户之间分发程序集,然后给他们更新版本时,可能会出现问题,所以他们需要重新编译引用const的程序集来获取更新的值。

简而言之,static字段类似于一个全局变量,可以在不实例化任何底层类型的实例的情况下访问,但在您的情况下,private访问修改使其在声明的类型之外不可访问。

编辑:

关于常量的非常好的Community Wiki帖子:跨程序集引用常量(自2013年6月起不再存在)

const是该语言的关键字。一旦定义好了,你就不允许改变它。是的,属性也描述了同样的故事,但它可以有更多的结构。

const中,一旦初始化就不能修改。get也不能修改。但是当你有一个场景,你需要不同的值,每次调用Or,你的值取决于任何其他函数调用,get将被使用。


private static string Mask
   {
       get
       {
           var someOtherMethodText = SomeOtherMethodText();
           return "some text" + someOtherMethodText;
       }
   }