Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于字段初始化的静态或只读修饰符_C# - Fatal编程技术网

C# 用于字段初始化的静态或只读修饰符

C# 用于字段初始化的静态或只读修饰符,c#,C#,上课: class MyClass { private static TimeSpan myField = TimeSpan.FromSeconds(5); public void SomeMethod() { // usage of field } } myField字段初始化为内联。我应该为它选择什么修改器,静态(如上)还是只读 静态-表示它属于类而不是实例 只读-这意味着一旦定义了它,就无法更改 const-就像C语言中的#define一样,只是内

上课:

class MyClass
{
   private static TimeSpan myField = TimeSpan.FromSeconds(5);

   public void SomeMethod()
   {
       // usage of field
   }
}

myField字段初始化为内联。我应该为它选择什么修改器,静态(如上)还是只读

静态
-表示它属于类而不是实例

只读
-这意味着一旦定义了它,就无法更改

const
-就像C语言中的
#define
一样,只是内联常量

这些是不同的东西,你不能比较它们


加上。只有基元类型可以是
const
。在您的例子中,静态只读

静态
——它意味着它属于类而不是实例

只读
-这意味着一旦定义了它,就无法更改

const
-就像C语言中的
#define
一样,只是内联常量

这些是不同的东西,你不能比较它们

加上。只有基元类型可以是
const
。在6.0之前的C#中,您将实现一个由
static
属性包装的
static readonly
字段

顺便说一句,在C#6.0及以上版本中,这可以简化为:

class MyClass
{
   // A read-only property that can only be set with a property initializer
   // or in a static constructor
   private static TimeSpan MyProperty { get; } = TimeSpan.FromSeconds(5);

   public void SomeMethod()
   {
       // usage of field
   }
}
…在编译时实现一个备份
静态只读
字段。

在6.0之前的C#中,您将实现一个由
静态
属性包装的
静态只读
字段

顺便说一句,在C#6.0及以上版本中,这可以简化为:

class MyClass
{
   // A read-only property that can only be set with a property initializer
   // or in a static constructor
   private static TimeSpan MyProperty { get; } = TimeSpan.FromSeconds(5);

   public void SomeMethod()
   {
       // usage of field
   }
}

…它在编译时实现了一个backing
静态只读
字段。

它们的含义完全不同。你应该了解每一项都意味着什么,并根据你想要达到的目标来决定。我知道每一项都意味着什么。但在这种情况下,我怀疑。我想要两件事:1)初始化应该只发生一次;2) 赋值不应该被修改。在1)我的意思是“只有一个”适用于所有实例。它们的意思完全不同。你应该了解每一项都意味着什么,并根据你想要达到的目标来决定。我知道每一项都意味着什么。但在这种情况下,我怀疑。我想要两件事:1)初始化应该只发生一次;2) 赋值不应修改。在1)中,我指的是所有实例的“仅一个”。
TimeSpan
不能是
const
。只有基元类型(数字、字符串等)可以是常量。
TimeSpan
不能是
const
。只有基元类型(数字、字符串等)可以是常量。