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
。只有基元类型(数字、字符串等)可以是常量。