asp.net中get和set用法

在早期学习c#的过程中,经常遇到这样的语句:

 public string StudentName  
{  
       get{return stuName;}  
       set{stuName=value;}  
} 

当时也不是很明白为什么要这样?学深了c#后,又没法对其做一个总结。今天看了《Visual c#.net程序设计教程》这本书,总结得不错,做下笔记:
在许多面向对象程序设计语言中,属性(property)是指对象的特征和状态,具体地说就是指对象的数据成员。程序员可以指定数据成员能否被外界直接访问,如果数据成员被指定为public的,外界就可以用“对象名.公有数据成员名”访问该成员。c#是完全面向对象的语言,c#倡导一种新途径,对数据成员能够更好地封装和保护,同时又向外界提供更有效的访问形式。c#中用来达到这个目标的就是“属性”,而那些数据成员,在c#中称为“字段”或“域”。
属性的定义和使用
属性由两个部分组成:属性头和存储器。存储器分为get访问器和set访问器。声明属性的一般形式为:
修饰符 类型 属性名

public string propertyName          
{  
 get   //get存取程序  
  {...}  
 set   //set存取程序  
  {...}  
}  

属性的修饰符可以是任何访问控制符(public/private/protected),还可以被定义为静态(static)。get和set是一种特定的方法,get用来从对象中读取数据,而set用来向字段写入数据,将外界的数据写入字段时,c#使用value表示输入的数据,value可以说是一个准关键字,例如:

set{aField=value;}  

以下是一个简单的例子,演示了属性的基本形式和用法:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  

namespace get与set用法  
{  
public class Student//学生类  
{  
    //下面三个变量StruName,StuCollege,StuAge都是属性中的数据成员  
    private string StuName = "xuwei";  
    private string StuCollege = "CUGB";//  
    private int StuAge = 24;  
    public string studentNmae  
    {  
        /*get和set是一种特定的方法,get用来从对象中读取数据,而set用来向字段写入数据, 
         * 将外界的数据写入字段时,c#使用value表示输入的数据,value可以说是一个准关键字,所以不需要声明value这个变量 
         */  
        get { return StuName;}  
        set { StuName = value; }  
    }  
    public string studentCollege//学校名字不可改,所以没有set访问器,set用来修改studentCollege属性  
    {  
        get { return StuCollege; }  
       // set { StuCollege = value; }  
    }  
    public int studentAge  
    {  
        get { return StuAge; }  
        set { StuAge = value; }  
    }  
    public string studentInfo  
    {  
        get { return "name:" + studentNmae + "," + "school:" + studentCollege + "," + "age:" + studentAge; }  
    }  
}  

class Program  
{  
    static void Main(string[] args)  
    {  
        Student stu = new Student();  
        Console.WriteLine(stu.studentNmae);  
        stu.studentNmae = "xuyanghong";//可直接赋值,这里的值就是相当于前面的 set { StuName = value; }  
        Console.WriteLine(stu.studentNmae);  
        stu.studentAge = 25;  
        stu.studentNmae = "zhangchengrong";  
        Console.WriteLine(stu.studentInfo);  
    }  
 }  
}  

上面代码中定义了一个属性studentName,它包含get访问器和set访问器。属性studentName封装了类Student中的字段 stuName,字段如果没有加访问控制符,被默认为private,外界不能直接访问它,现在外界可以通过studentName属性自由地存取 stuName字段了。

属性的get和set都是可执行的程序语句组合,具有行为的特点;而使用具有get访问器和set访问器的属性时候就像使用字段一样,即可以作为左值接受数据,又可以作为右值输出数据,系统正是按照属性出现在语句中的位置,自动地选择是调用get还是调用set。

属性的读写控制

属性中的get和set可以只用一个,如果只有get而没有set,那么这个属性只可读出,不可写入;如果只有set而没有get,那么这个属性是只写入,不可读出。

在属性中完成更多功能

既然get和set是程序,那当然可以做更多的事情。一个合理的分工是:设计字段是为了便于内部方法使用,而尽量与外界隔绝;设计属性考虑的是方便外界的使用,但是不让外界知道的数据一律不给。

总而言之:使用get和set能够让属性具有更好的封装性,而且既能够在等号的左边,又能在等号的右边。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值