博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#定义类属性
阅读量:5989 次
发布时间:2019-06-20

本文共 2072 字,大约阅读时间需要 6 分钟。

一、定义属性

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;
}
}

转载地址:http://kejlx.baihongyu.com/

你可能感兴趣的文章
彻底删除IE收藏夹中的链接文件夹
查看>>
MySQL(必须要的基础配置)
查看>>
float及double类型减法运算时精度丢失问题
查看>>
远程重装mac系统
查看>>
C#设计模式(6)——原型模式(Prototype Pattern)
查看>>
我的友情链接
查看>>
我的路,该怎么走
查看>>
Linux简易审计工具
查看>>
Windows 8.1:Windows 8续集演绎
查看>>
我的友情链接
查看>>
static关键字
查看>>
linux限制用户权限之lshel开通tcpdump权限
查看>>
PYTHON的函数对参数解析分析
查看>>
mfsmount
查看>>
Android 两点距离的计算方法
查看>>
Openwrt 交叉编译libxml2
查看>>
Redis(一)安装配置
查看>>
CentOS7使用yum安装nginx最新版本
查看>>
GCC X64
查看>>
Linux主机上通过iptables实现NAT功能
查看>>