标签:
C#类的属性有公有属性(public)和私有属性(private)。如果直接将一个属性声明为public,则该类的任意实例可以随意获取或修改该属性的值,很不安全。.NET Framework中,我们使用get关键字来获取一个公有属性的值,而使用set来设置一个公有属性的值。而在get或set中,可以编写代码来控制对属性值的获取和修改。
public class SplaybowClass { //.net2.0及1.1版本设置属性的方式 private String name; //私有属性 public String Name { //对应name这个私有属性的公有属性 get { return this.name; } set { this.name = value; } } //.net3.5之后,效果与上面一样 public int Port{get; set;} }
注意:
get和set可以根据实际需要而出现其中一个,不一定两个都要出现。
例子中公有属性的Name和私有属性的name就一个大小写的差别,这只是一个书写习惯。也有人喜欢在私有属性后加一个下划线(_)。
索引器允许类或者结构的实例按照与数组相同的方式进行索引取值,索引器与属性类似,不同的是索引器的访问是带参的。声明与属性有些类似。索引器定义的时候不带有名称,但带有 this 关键字,它指向对象实例。语法如下:
element-type this[type index] { // get 访问器 get { // 返回 index 指定的值 } // set 访问器 set { // 设置 index 指定的值 } }
其中: element-type 指元素类型, type 指索引的类型,可以是string、int等。
class DayCollection { string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" }; private int GetDay(string testDay) { for (int j = 0; j < days.Length; j++) { if (days[j] == testDay) { return j; } } } public int this[string day] //索引器的定义,元素类型为int,索引类型为string { get //只有get属性,没有设置set属性 { return (GetDay(day)); } } }
索引器的行为的声明在某种程度上类似于属性(property)。就像属性,可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。可以使用数组访问运算符([ ])来访问该类或结构的实例。
using System; using System.Collections; public class IndexerClass { private string[] name = new string[2]; public string this[int index] //索引器必须以this关键字定义,其实这个this就是类实例化之后的对象 { //实现索引器的get方法 get { if (index < 2) { return name[index]; } return null; } //实现索引器的set方法 set { if (index < 2) { name[index] = value; } } } } public class Test { static void Main() { //索引器的使用 IndexerClass Indexer = new IndexerClass(); Indexer[0] = "Tom Brown"; //"="号右边对索引器赋值,其实就是调用其set方法 Indexer[1] = "Jim Green"; Console.WriteLine(Indexer[0]); //输出索引器的值,其实就是调用其get方法 Console.WriteLine(Indexer[1]); } }
标签:
原文地址:http://www.cnblogs.com/jin521/p/5735508.html