首页 > 编程笔记 > C#笔记 阅读:3

C#中的字段和属性(附带实例)

类的定义包括类头和类体两部分,其中,类头就是使用 class 关键字定义的类名,而类体是用一对大括号{}括起来的,在类体中主要定义类的成员,类的成员包括字段、属性、方法、构造函数等。

本节将对字段和属性进行讲解。

C#字段

字段就是程序开发中常见的常量或者变量,它是类的一个构成部分,使得类可以封装数据。

【实例 1】计算圆的面积。创建一个控制台应用程序,在默认的 Program 类中定义一个变量,用来存储圆半径;定义一个常量,用来存储 π 的值;然后在 Main() 方法中计算圆的面积并输出。代码如下:
class Program
{
    static double r; //定义一个变量,用来存储圆半径
    const double PI = 3.14; //定义常量,存储π的值
    static void Main(string[] args)
   {
       Console.Write("请输入半径: ");
       Program.r = Convert.ToDouble(Console.ReadLine()); //输入圆半径
       Console.WriteLine("圆面积为: " + PI * Math.Pow(r, 2)); //计算圆面积
       Console.ReadLine();
   }
}
代码注解:
程序运行结果为:
请输入半径: 4
圆面积为: 50.24

字段属于类级别的变量,未初始化时,C# 将其初始化为默认值,但不会将局部变量初始化为默认值。例如,下列代码是正确的,输出为 0:
class Program
{
    static int i;
    static void Main(string[] args)
   {
       Console.WriteLine(i);
   }
}
但是,如果将变量 i 的定义存储在 Main() 方法中,则运行时会出现如下图所示的错误提示:


图 1 局部变量未初始化时的错误

C#属性

属性是对现实实体特征的抽象,提供对类或对象的访问。类的属性描述的是状态信息,在类的实例中,属性的值表示对象的状态值。

C#中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,把读取和写入对象的某些特性与一些操作关联起来,开发人员可以像使用公共数据成员一样使用属性,属性的声明语法如下:
【权限修饰符】【类型】【属性名】
{
    get {get访问器体}
    set {set访问器体}
}

根据是否存在 get 访问器和 set 访问器,可以将属性分为以下 3 种:
属性的主要用途是限制外部类对类中成员的访问权限,定义在类级别上。

例如,自定义一个 TradeCode 属性,表示商品编号,要求该属性为可读可写属性,并设置其访问级别为 public,代码如下:
private string tradecode = "";
public string TradeCode
{
    get { return tradecode; }
    set { tradecode = value; }
}
由于属性的 set 访问器中可以包含大量的语句,因此可以对赋予的值进行检查,如果值不安全或者不符合要求,就可以进行处理操作,这样可以避免因为给属性设置了错误的值而导致的异常。

【实例 2】首先创建一个控制台应用程序,在默认的 Program 类中定义一个 Age 属性,设置访问级别为 public,因为该属性提供了 get 访问器和 set 访问器,因此它具有可读可写属性;然后在该属性的 set 访问器中对属性的值进行控制,控制只能输入 1~70 之间的数据,如果输入其他数据,就会提示相应的信息。代码如下:
class Program
{
    private int age; //定义字段
    public int Age //定义属性
    {
        get //设置get访问器
        {
            return age;
        }
        set //设置set访问器
        {
            if (value > 0 && value < 70)
            {
                age = value;
           }
           else
           {
               Console.WriteLine("输入数据不合理!");
           }
       }
    }
    static void Main(string[] args)
   {
       Program p = new Program(); //创建Program类的对象
       while (true)
       {
           Console.Write("请输入年龄: ");
           p.Age = Convert.ToInt16(Console.ReadLine()); //为年龄属性赋值
       }
   }
}
第 24 行代码用来创建类的对象,创建类的对象时,使用 new 操作符。程序运行结果为:

请输入年龄: 30
请输入年龄: 140
输入数据不合理!
请输入年龄: -5
输入数据不合理!
请输入年龄:


C# 中支持自动实现的属性,即在属性的 get 访问器和 set 访问器中没有任何逻辑,代码如下:
public int Age
{
    get;
    set;
}

使用自动实现的属性时,就不能在属性设置中进行属性的有效验证,例如,在实例 2 中,不能检查输入的年龄在 0~70 之间。另外,如果要使用自动实现的属性,则必须同时拥有 get 访问器和 set 访问器,如果只有 get 或者只有 set 的代码,就会出现错误,例如,下面的代码是不合法的:
public int Age
{
    get;
}

相关文章