Dan*_*han 6 .net c# singleton readonly
public sealed class Singleton
{
static readonly Singleton instance=new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我认为即使readonly从instance成员实例中删除关键字,单例仍然可以正常工作.
请帮我纠正我对这里概念的理解.
Ed *_* S. 11
因为如果字段没有标记为只读,则可以在Singleton类中进行修改.当然,它仍然无法被外部世界修改,但如果在程序的生命周期中有一个以上的实例,则单例实际上不是单例,并且readonly说明符强制执行您想要的语义单身人士班.
编辑回应:
- 它的静态,只存在一个实例.
- 价值不能改变,因为它没有设定者.
静态变量当然可以设置为在运行时引用不同的对象.如果仅在类中由于它是私有的,则值可以改变.如果实施该类以使该字段仅被分配一次,则在实践中不会成为问题.但是,由于假定的意图是单例实例永远不会改变,readonly修饰符保证构造函数之外的那些语义.这不是必需的,因为类的客户端不能更改引用,但它是首选的,因为它a)使代码的意图清晰,并且b)防止引用即使在类中也被更改.
readonly在这种情况下,使用并不重要,但它通过指示字段的性质来强制执行代码的语义.就个人而言,我总是将readonly关键字用于所有字段声明,其值仅初始化一次.它还可以帮助编译器在某些情况下执行某些优化.
| 归档时间: |
|
| 查看次数: |
2307 次 |
| 最近记录: |