码迷,mamicode.com
首页 > Windows程序 > 详细

C# in depth (第八章 用智能的编译器来防错)

时间:2015-08-21 20:52:20      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:

8.1   自动实现的属性

公开可见的静态成员通常应该是线程安全的,编译器在这方面帮不上什么忙,得自己去实现

public class InstanceCountingPerson
    {
        public string Name { get; private set; }
        public int Age { get; private set; }

        private static int InstanceCounter { get; set; }
        private static readonly object counterLock = new object();

        public InstanceCountingPerson(string name, int age)
        {
            Name = name;
            Age = age;

            lock (counterLock)
            {
                InstanceCounter++;
            }
        }
    }

 作者见过的使用静态自动属性的唯一情况是,取值方法是公共的,赋值方法是私有的,并且赋值方法只能在类型初始化程序中使用。 

(以下代码无法通过编译)

  public struct Foo
    {

        public int Value { get; private set; }

        public Foo(int value)
        {
            this.Value = value;
        }
    }

只有加上this 才可以

 public struct Foo
    {

        public int Value { get; private set; }

        public Foo(int value) :this()
        {
            this.Value = value;
        }
    }

 8.2 隐式类型的局部变量

8.2.1 用var声明局部变量

8.2.2 隐式类型的限制

  • 被声明的变量是一个局部变量,而不是静态字段和实例字段。
  • 变量在声明的同时被初始化;
  • 初始化表达式不是方法组,也不是匿名函数。
  • 初始化表达式不是null
  • 语句中只声明了一个变量。
  • 你希望变量拥有的类型是初始化表达式的编译时类型
  • 初始化表达式不包含正在声明的变量。

8.2.3 隐式类型的优缺点

8.2.4 建议

8.3 简化的初始化

8.3.1定义示例类型

 public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }

        List<Person> friends = new List<Person>();
        public List<Person> Friends
        {
            get { return friends; }
        }

        Location home = new Location();
        public Location Home
        {
            get { return home; }
        }

        public Person()
        {
        }

        public Person(string name)
        {
            Name = name;
        }
    }

 public class Location
    {
        public string Country { get; set; }
        public string Town { get; set; }
    }

8.3.2 设置简单属性

C#3.0可以用一个表达式来设置对象的所有属性

8.3.3 为嵌入对象设置属性

8.3.4 集合初始化程序

 

C# in depth (第八章 用智能的编译器来防错)

标签:

原文地址:http://www.cnblogs.com/leonhart/p/4748732.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!