记《learning hard C#学习笔记》 书中一个错误

简介: 以前学过c# 但是不够系统

最近读了一本《learning hard C#学习笔记》 系统的学习一下

读到50页 发现一个问题,这本书用的单例有问题

44.jpg

主要问题:


1 首先public static Person person 这里的public 就有问题  单例里面 这里应该是private


2 在GetInstance方法里面  person = new Person() 这句不对


这样每次调用GetInstance方法都会new一个Person对象出来


就不是单例


线程完全问题等暂且不谈。




两次通过GetInstance()方法获取 Person实例。


发现 私有构造器方法被调用两次且


用==去判断发现,两次获取的Person实例并不相同。


因此不是单例。

55.png

对Person类作如下改动:


   class Person

   {

       private string name;

       private static Person person;

       public string Name

       {

           get { return name; }

       }

       private Person()

       {

           Console.WriteLine("私有构造方法被调用");

           this.name = "learning hard";

       }

       public static Person getInstance()

       {

           if (person == null)

           {

               person = new Person();

           }

           return person;

       }

   }


运行:

   class Program

   {

       static void Main(string[] args)

       {

           Person person1 = Person.getInstance();

           Person person2 = Person.getInstance();

           Console.WriteLine("单例是否有效:{0}", person1 == person2);

           Console.WriteLine("类实例的name属性为:{0}",person1.Name);

           Console.Read();

       }

   }



运行结果:



其次 个人建议方法名用小驼峰命名法


获取实例的方法名用getInstance比较合适


关于单例 参见:http://blog.csdn.net/lovesomnus/article/details/23679505

————————————————

版权声明:本文为CSDN博主「明明如月学长」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/w605283073/article/details/51305359

相关文章
|
前端开发
【前端学习从青铜到王者】—HTML常用标签(二)
【前端学习从青铜到王者】—HTML常用标签(二)
|
存储 运维 监控
研发视角:一个需求应该怎么拆解与实现?
本文介绍了在软件研发过程中,开发人员接到需求后应考虑的两个核心问题:做什么(WHAT)和怎么做(HOW)。文章强调了解析需求时的共性问题,包括关注UI组件数量、数据来源、数据与UI的关联、用户行为响应、用户行为采集以及发布后的运维和监控。作者通过实例和抽象层次图说明了如何拆解和实现这些关注点,并提供了具体的操作方法和建议,以帮助开发和测试人员更好地理解和处理需求。
使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示
使用ScottPlot库在.NET WinForms中快速实现大型数据集的交互式显示
331 1
Property ‘Authorization‘ does not exist on type ‘HeadersDefaults‘
Property ‘Authorization‘ does not exist on type ‘HeadersDefaults‘
156 0
|
SQL Oracle 关系型数据库
SqlAlchemy 2.0 中文文档(八十一)(5)
SqlAlchemy 2.0 中文文档(八十一)
73 1
|
供应链 架构师 双11
供应链业务架构设计概览(一)
供应链业务架构设计概览
2123 0
|
Ubuntu 编译器 Linux
Ubuntu下Qt编程,从QT的安装到编写notepad
Ubuntu下Qt编程,从QT的安装到编写notepad
196 0
差分方程模型:基金运作与管理
差分方程模型:基金运作与管理
151 0
|
C语言
C语言中+=是什么含义
C语言中+=是什么含义
|
存储 网络协议 安全
【Docker系列】虚拟化+Docker概念(二)
【Docker系列】虚拟化+Docker概念(二)
【Docker系列】虚拟化+Docker概念(二)