首页 > 编程 > C# > 正文

C#中的属性

2023-05-02 19:48:25
字体:
来源:转载
供稿:网友

类在设计时,其字段成员一般被声明为私有的,如果想读取或设置其值,需要提供这样的方法,而在C#中,使用属性更充分体现了对象的封装性,让用户不直接操作类的相关数据,而是通过其提供的访问器进行访问。

属性可以是类、结构和接口的成员。其定义的形式为:

访问修饰符 数据类型 标识符
{
访问器声明;
}

访问修饰符可以是new,static,virtual,absctract,override和public,protected,private,internal的合法组合。

访问器有get访问器和set访问器两种,其声明的格式如下:

get
{
return 要访问的成员;
}

set
{
要设置值的成员 = value;
}

在使用get访问器时要注意,其使用return要返回的值必须与属性声明的数据类型相同,或能够隐式地转换为属性声明的数据类型。

set访问器的值是通过隐含的参数value带进来的,其主据类型也必须与属性声明的数据类型相同或能够进行隐式转换。

在属性定义中,get访问器和set访问器的规则如下:

(1)同时具有get访问器和set访问器的属性,其值是可以读取也可以进行修改的;

(2)只有get访问器的属性是只读属性,即这样的属性值仅允许读取,而不能进行修改;

(3)只有set访问器的属性为只写属性,即该属性的值仅能修改,而不能读取。

下面举一个例子,分别说明以上三种情况:

using System;

 

class Weather

{

  private float t; //温度

  private int w; //风级

  private string sun; //天气情况

  /// <summary>

  /// 温度属性

  /// </summary>

  public float Temperature

  {

   get

   {

     return t;

   }

   set

   {

     if(value!=t)

       t = value;

   }

 }

  /// <summary>

  /// 描述风的等级的属性

  /// </summary>

  public int Windy

  {

    set

    {

      w = value;

    }

  }

  /// <summary>

  /// 描述天气情况的属性

  /// </summary>

  public string Sun

  {

    get

    {

      return sun;

   }

  }

  /// <summary>

  /// 构造器

  /// </summary>

  public Weather()

  {

    this.sun = "天气晴朗";

  }

  /// <summary>

  /// 带参数的构造器

  /// </summary>

  /// <param name="s">描述天气情况的字符串</param>

  public Weather(string s)

  {

    this.sun = s;

  }

  /// <summary>

  /// 输出天气信息的方法

  /// </summary>

  public void PrintInfo()

  {

     Console.WriteLine("今天:{0},风级:{1},气温:{2}",sun,w,t);

   }

 }

 //定义主类进行测试

 class Test

{

  static void Main()

  {

    Weather wt = new Weather();

    // wt.Sun = "天气晴朗";//此语句将引起错误1

    wt.Temperature = 23.4f;

    wt.Windy = 4;

    Console.WriteLine("气温:{0}",wt.Temperature); //输出温度信息,即可修改亦可读取

   // Console.WriteLine("风级:{0}",wt.Windy ); //虽然可以修改,但不可读取,否则引起错误2

   Console.WriteLine("天气:{0}",wt.Sun); //虽然不能修改,但可以读

   wt.PrintInfo(); //使用类提供的方法,可以输出(读取)全部的信息

  }

}

错误1:无法对属性或索引器“Weather.Sun”赋值 -- 它是只读的

错误2:属性或索引器“Weather.Windy”无法用于此上下文中,因为它缺少 get 访问器

运行结果如下:

C#中属性的使用方法

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表