1、为结构或者类声明一个可读/可写的属性
struct Screen Position
{
  ...
  public int X
  {
      get {...}
      set {...}
  }
...
}

2、为结构或者类声明一个只读属性
struct Screen Position
{
  ...
  public int X
  {
      get {...}
  }
...
}

3、为结构或者类声明一个只写属性
struct Screen Position
{
  ...
  public int X
  {
      set {...}
  }
...
}

4、在接口中声明一个属性
interface IScreenPosition
{
  int X{get;set;}
  int Y {get;set;}
}

5、在结构或者类中实现一个接口属性
struct ScreenPosition:IScreenPosition
{
  public int X{...}
  public int Y {...}
}

6、创建一个自动属性

    class Polygon
    {
        public int NumSides { get; set; }
        public double SideLength { get; set; }

        public Polygon()
        {
            this.NumSides = 4;
            this.SideLength = 10.0;
        }
    }


Polygon square = new Polygon();
Polygon triangle = new Polygon { NumSides = 3 };
Polygon pentagon = new Polygon { SideLength = 15.5, NumSides = 5 };


注:
只有在一个结构或类初始化好之后,才能通过这个结构或类的属性来进行赋值。
ScreenPosition location;
location.X=40;//编译时错误,location尚未使用new来初始化

不可将属性作为一个ref或者out参数值传给一个方法;但可以将一个可写的字段作为ref或out参数值来传递。这是由于属性并不真正指向一个内存位置,相反,它指向的是一个访问方法。

在一个属性中,最多只能包含一个get accessor和一个set accessor。属性不能包含其它方法、字段或属性。

get accessor和set accessor不能获取任何参数。要赋的值会通过内建的、隐藏的value变量,自动传给set accessor。

不能声明const属性。如
const int X{get{...}set{...}}//编译时错误