** 第十章 ** ** ** ** 属性 ** ** **
摘要:
本章讨论 C# 中的 属性 及 索引器
** 一、属性 **
分为 静态 属性、 实例 属性和 虚 属性
l 避免 直接 访问类型字段或使用烦琐的 访问器 方法进行访问
l 很好的实现了类型的 数据封装 ,如:改变字段而维持属性的意义对用户是透明的
l 代码量小,运算量小的操作才使用属性,否则使用方法调用更合适
** 二、索引器 **
l 可有多个重载的索引器,只要参数列表不同即可
l 可通过应用 System.Runtime.CompilerServices.IndexerNameAttribute 特性改变编译器为索引器生成的方法名(缺省使用 get_Item(…) , set_Item(...) )
l 不能通过上述改变方法名的办法来定义多个参数列相同而仅名称不同的索引器
l 没有所谓“静态索引器”
注:在属性或索引器中添加对参数或 value 值得判定有助于保证程序的完整性
一个简单的示例:
using System;
class IndexerTest
{
private static string[] strArr = new string[5];
IndexerTest()
{
for(int i = 0; i < 5; i ++)
{
strArr[i] = i.ToString();
}
}
public string this[Int32 nIndex]
{
get{
return strArr[nIndex];
}
set{
strArr[nIndex] = value;
}
}
// 提供不同的参数列进行重载索引器
public string this[byte bIndex]
{
get{
return strArr[bIndex];
}
set{
strArr[bIndex] = (string)value;
}
}
// 只读属性
public string[] StrArr
{
get{
return strArr;
}
}
public static void Main ()
{
IndexerTest it = new IndexerTest();
it[1] = "Hello"; // 利用索引器进行写操作
foreach(string str in it.StrArr)
{
Console.WriteLine(str);
}
}
}
/*
运行结果:
0
Hello
2
3
4
*/