前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记《learning hard C#学习笔记》 书中一个错误

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

作者头像
明明如月学长
发布2021-08-27 15:12:54
2970
发布2021-08-27 15:12:54
举报

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

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

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

主要问题:

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

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

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

就不是单例

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

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

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

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

因此不是单例。

对Person类作如下改动:

代码语言:javascript
复制
    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;
        }

    }

运行:

代码语言:javascript
复制
    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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/05/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档