• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

c#中的属性

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1126/209.html

 

  在C#中我们可以很自由的访问共有字段,但有时我们常州微信小程序开发工作室-幻天网络可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性。

 

  1、基本用法

  c#中的属性由属性作用域中定义的get作用域(访问方法)和set作用域(访问方法)构成。

 

class Test

{

    private int number;

 

    //int表示该属性所封装的数据类型

    //数据类型必须与相应的字段(number)相同   

    public int Num

    {

        get{return number;}

        set{number=value;}

    }

}

 

  当封装数据时,可能希望配置一个只读属性。为此,可以忽略set块。类似,如果想拥有一个只读属性,就忽略get块。

 

  2、静态属性  

  C#静态属性可以是读写属性,只读属性,只写属性中的任意一种。静态访问器适用于整个类,而不是类的实例。静态属性中的set,get访问器只能访问类的静态成员。静态属性可以通过类名访问,不能使用实例调用,这与静态方法相同。

 

//简单的储蓄账户类

class SavingAccount

{

  //实例级别的数据

  public double currBalance;

 

  //静态数据点

  private static double currInterestRate = 0.04;

 

  //静态属性

  public static double InterestRate

  {

    get{return currInterestRate;}

    set{currInterestRate=value;}

  }                    

}

 

 

  3、自动属性

  自动属性可以简化封装数据字段的过程,减轻了定义私有返回字段和相关c#属性成员的工作。在定义自动属性时,只指定访问修饰符、实际的数据类型、属性名称和空的get/set作用域。在编译时,编译器为类型自动生成了私有返回字段和适当的get/set实现逻辑。

 

class Enemy

{

    //自动属性

    public string Name{get;set;}

    public int Life{get;set;}

    public float Attack{get;set;}

    

}

  注意:与传统的属性不同的是,不允许构建只读或只写的自动属性,自动属性定义是必须同时支持读写功能。但是定义更严格的get或set是可以的

 

  4、关于自动属性和默认值

  可以直接在代码中使用封装了数字或布尔数据的自动属性,因为隐藏的返回字段将设置一个可以直接使用的安全的默认值。但如果自动属性封装了另一个类变量,隐藏的私有引用类型的默认值将设为null。

  例如下面的类spawn,使用了两个自动属性

 

class Spawn

{

    //隐藏的int字段默认值为0

    public int numbers{get;set;}

    //隐藏的Enemy返回字段为null

    public Enemy MyEnemy{get;set;}

}

 

  当直接调用MyEnemy时,将会在运行时得到空引用异常,因为没有为后台使用的Enemy成员变量设置新的对象。

  由于私有的返回字段是在编译时创建的,所以不能直接使用new关键字直接分配引用类型,必须在类的构造函数内部执行,以确保对象以安全方式诞生。 

 

class Spawn

{

     //隐藏的int字段默认值为0

     public int numbers{get;set;}

     //隐藏的Enemy返回字段为null

     public Enemy MyEnemy{get;set;}

     

     //必须用构造函数重写分配给隐藏返回字段的默认值

     public Spawn()

     {

        MyEnemy = new Enemy();

        numbers = 1;

     }

     

     public Spawn(Enemy enemy, int num)

     {

        MyEnemy = enemy;

        numbers = num;

     }

}



上篇:上一篇:c#实现字符串倒序的n种写法
下篇:下一篇:GrabPass捕捉屏幕纹理