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 (newArgumentOutOfRangeException("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;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值