博客园  :: 首页  :: 联系 :: 管理

C# 2008 学习笔记 - 自动属性

Posted on 2008-02-20 14:28  sunrack  阅读(1775)  评论(2编辑  收藏  举报
一、定义

class Car
{
// Automatic property syntax.
public string PetName { getset; }
}

编译器会自动生成私有字段

二、注意与抽象属性的区别

abstract class Car
{
// Abstract property in an abstract base class.
public abstract string PetName { getset; }
}

三、不能定义只读或者只写的属性,必须同时提供

// Read-only property? Error!
public int MyReadOnlyProp { get; }
// Write only property? Error!
public int MyWriteOnlyProp { set; }


四、可以给读和写赋予不同的访问权限

public string PetName { getprotected set; }

五、自动属性和初始值

自动属性会为字段自动赋予变量类型的初始值,如果是引用类型,则为null

所以不能直接在自动属性上使用new,需要用自定义的构造函数初始化

class Garage
{
// The hidden backing field is set to zero!
public int NumberOfCars { getset; }

// The hidden backing field is set to null!
public Car MyAuto { getset; }
// Must use constructors to override default
// values assigned to hidden backing fields.
public Garage()
{
MyAuto 
= new Car();
NumberOfCars 
= 1;
}
public Garage(Car car, int number)
{
MyAuto 
= car;
NumberOfCars 
= number;
}
}


六、不适用的情况

如果想在属性中增加判断、验证等逻辑,则只能用传统的属性定义方法实现