1、属性
所谓属性其实就是特殊的类成员,它实现了对私有类域的受控访问。
在C#语言中有两种属性方法,其一是get,通过它可以返回私有域的值,其二是set,通过它就可以设置私有域的值。
比如说,以下面的代码为例,创建学生姓名属性,控制对name字段的受控访问:
属性定义:
访问修饰符 返回类型 属性名
{
get{}
set{}
}
using System; public class Student { private string name; /// <summary> /// 定义学生的姓名属性 /// </summary> public string Name { get { return name; } set { name = value; } } } class Program { static void Main(string[] args) { Student student = new Student(); student.Name = "张三"; Console.WriteLine(student.Name); Console.Read(); } }
2、索引器
简单说来,所谓索引器就是一类特殊的属性,通过它们你就可以像引用数组一样引用自己的类。
假设一个班级有若干个学生,构建索引器就可以很方便地调用:
索引器的定义:
访问修饰符 返回类型 this[参数类型 参数...]
{
get {}
set {}
}
public class Student { public List<Student> listStudents = new List<Student>(); /// <summary> /// 构建索引器 /// </summary> /// <param name="i"></param> /// <returns></returns> public Student this[int i] { get { return listStudents[i]; } set { listStudents[i] = value; } } private string name; /// <summary> /// 属性 /// </summary> public string Name { get { return name; } set { name = value; } } public Student(string name) { this.name = name; } public Student() { this.listStudents.Add(new Student("张三")); this.listStudents.Add(new Student("李四")); this.listStudents.Add(new Student("王五")); this.listStudents.Add(new Student("赵六")); } } class Program { static void Main(string[] args) { Student student = new Student(); int num = student.listStudents.Count; Console.WriteLine("获取所有学生:"); for (int i = 0; i < num; i++) { Console.WriteLine(student[i].Name); //通过索引器,取所有学生名 } //设置索引器的值 student[0].Name = "老马"; Console.WriteLine("修改后..."); for (int i = 0; i < num; i++) { Console.WriteLine(student[i].Name); } Console.Read(); } }
属性和索引器的主要区别:
1、类的每一个属性都必须拥有唯一的名称,而类里定义的每一个索引器都必须拥有唯一的签名或者参数列表(这样就可以实现索引器重载)。
2、属性可以是static(静态的)而索引器则必须是实例成员。