C#学习笔记之定义类的属性

发布时间:2019-12-18编辑:脚本学堂
本文介绍下,在C#中定义类的属性的方法,有需要的朋友,参考下吧。

一、定义属性
1.属性拥有两个类似于函数的代码块,一个用于获取属性的值(get),一个用于设置属性的值(set),这两个块也称为访问器,可以用于控制对属性的访问级别。

2.属性至少要包含一个块才是有效的,可以忽略其中一个来创建只读(只有get块)或只写(只有set块)属性。当然,这仅适用于外部代码,因为类中的代码可以访问这些块能访问的数据。

3.可以在访问器上包含可访问关键字,如使get块变成公共的,把set块变成受保护的。

4.属性的基本结构包括标准的要可访问关键字(public、private等)后跟类名、属性名和get块/set块,语法:
 

public int MyIntProp
{
get {}
set {}
}
 

注:定义属性的第一行非常类似于定义字段,区别是行末没有分号。

5.get块必须有一个属性类型的返回值。简单的属性一般与一个私有字段相关联,以控制对这个字段的访问,此时get块可以直接返回该字段的值。
如:
 

private int myInt;    //定义字段
public int MyIntProp //定义属性
{
get{ return myInt; }
}
 

6.set块以类似的方式把一个值赋给字段,这里可以使用关键字value引用用户提供的属性值,并可以对value进行判断等**作。
如:
 

private int myInt;    //定义字段
public int MyIntProp //定义属性
{
get{ return myInt; }
set{ if (value >= 0 && value <= 10) myInt = value; }
}
 

注:当赋给属性的值超出set 代码中限定的时候,可以有四种方法进行处理:
   什么也不做(如上述代码所示);
   给字段赋默认值;
   继续执行,就好像没有发生错误一样,但记录下该事件,以备将来分析;
   抛出一个异常;

一般情况下,后两种方法比较好。采用第四种方法时,可使用标准的System异常。
如:

set{
        if (value >= 0 && value <= 10) intVal = value;
          else
throw (new ArgumentOutOfRangeException("Val", value, "Val must be assigned a value between 0 and 10."));
     }
 

可以在使用属性的代码中通过try…catch…finally逻辑来处理。

7.属性可以使用virtual,override和abstract关键字,就像方法一样,但这几个关键字不能用于字段。

8.访问器可以使用什么可访问的关键字,取决于属性的可访问性。访问器的可访问性不能高于它所属的属性,也就是说,私有属性对它的访问器不能包含任何可访问关键字
旅馆对住宿人员进行登记,要记录的信息有:客人姓名、性别、所住的房间号、已住宿的天数。这里,客人的姓名和性别一经确定就不能理更改了,用户可以要求改变房间,住宿的天数当然也是不断变化的。我们在类的构造函数中对客人的姓名和性别进行初始化,在四个属性中,客人的姓名和性别是只读的,故只具有get访问器;房间号和住宿天数允许改变,同时具有set访问器和get访问器。
 

复制代码 代码示例:
using System;
class Program
{
static void Main()
{
   Customer c=new Customer("王玉珍",Customer.sex.女,"7",10);
   Console.WriteLine("旅馆住宿人员的姓名为{0},姓名为{1},门牌号码{2},共住了{3}天。",c.Name,c.Sex,c.No,c.Day);
   Console.ReadKey();
}
}
public class Customer
{
public enum sex
{
   男, 女
};
public string s_name;
public string Name
{
   get
   {
    return s_name;
   }
}
private sex m_sex;
public sex Sex
{
   get
   {
    return m_sex;
   }
}
private string s_no;
public string No
{
   get
   {
    return s_no;
   }
   set
   {
    if (s_no != value)
    {
     s_no = value;
    }
   }
}
private int i_day;
public int Day
{
   get
   {
    return i_day;
   }
   set
   {
    if (i_day != value)
    {
     i_day = value;
    }
   }
}
public Customer(string name, sex sex, string no, int day)
{
   s_name = name;
   m_sex = sex;
   s_no = no;
   i_day = day;
}
}