属性 索引器(附例子)
属性
[访问修饰符] 数据类型 属性名
{
get{};
set{}; //内置参数 value 用于传递数据
}
1 using System;
2
3 namespace Example_1
4 {
5 class SavingsAccount
6 {
7 //用于存储帐户号码、余额和已获利息的类字段。
8 private int _accountNumber;
9 private double _balance;
10 private double _interestEarned;
11
12 // 利率是静态的,因为所有的帐户都使用相同的利率
13 private static double _interestRate;
14
15 // 构造函数初始化类成员
16 public SavingsAccount(int accountNumber, double balance)
17 {
18 this._accountNumber = accountNumber;
19 this._balance = balance;
20 }
21
22 // AccountNumber只读属性
23 public int AccountNumber
24 {
25 get
26 {
27 return _accountNumber;
28 }
29 }
30
31 // Balance 只读属性
32 public double Balance
33 {
34 get
35 {
36 if (_balance < 0)
37 Console.WriteLine("无余额");
38 return _balance;
39 }
40 }
41
42 // InterestEarned 读/写属性
43 public double InterestEarned
44 {
45 get
46 {
47 return _interestEarned;
48 }
49
50 set
51 {
52 // 验证数据
53 if (value < 0.0)
54 {
55 Console.WriteLine("InterestEarned 不能为负数");
56 return;
57 }
58 _interestEarned = value;
59 }
60 }
61
62 // InterestRate 读/写属性为静态,
63 // 因为所有特定类型的帐户都具有相同的利率
64 public static double InterestRate
65 {
66 get
67 {
68 return _interestRate;
69 }
70
71 set
72 {
73 // 验证数据
74 if (value < 0.0)
75 {
76 Console.WriteLine("InterestRate 不能为负数");
77 return;
78 }
79 else
80 {
81 _interestRate = value / 100;
82 }
83 }
84 }
85 }
86
87
88 class TestSavingsAccount
89 {
90 /// <摘要>
91 /// 应用程序的主入口点。
92 /// </摘要>
93 [STAThread]
94 static void Main(string[] args)
95 {
96 // 创建 SavingsAccount 的对象
97 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000);;
98 // 用户交互
99 Console.WriteLine("输入到现在为止已获得的利息和利率");
100 objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine());
101 SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine());
102
103 // 使用类名访问静态属性
104 objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate;
105 Console.WriteLine("获得的总利息为: {0}", objSavingsAccount.InterestEarned);
106 }
107 }
108 }
2
3 namespace Example_1
4 {
5 class SavingsAccount
6 {
7 //用于存储帐户号码、余额和已获利息的类字段。
8 private int _accountNumber;
9 private double _balance;
10 private double _interestEarned;
11
12 // 利率是静态的,因为所有的帐户都使用相同的利率
13 private static double _interestRate;
14
15 // 构造函数初始化类成员
16 public SavingsAccount(int accountNumber, double balance)
17 {
18 this._accountNumber = accountNumber;
19 this._balance = balance;
20 }
21
22 // AccountNumber只读属性
23 public int AccountNumber
24 {
25 get
26 {
27 return _accountNumber;
28 }
29 }
30
31 // Balance 只读属性
32 public double Balance
33 {
34 get
35 {
36 if (_balance < 0)
37 Console.WriteLine("无余额");
38 return _balance;
39 }
40 }
41
42 // InterestEarned 读/写属性
43 public double InterestEarned
44 {
45 get
46 {
47 return _interestEarned;
48 }
49
50 set
51 {
52 // 验证数据
53 if (value < 0.0)
54 {
55 Console.WriteLine("InterestEarned 不能为负数");
56 return;
57 }
58 _interestEarned = value;
59 }
60 }
61
62 // InterestRate 读/写属性为静态,
63 // 因为所有特定类型的帐户都具有相同的利率
64 public static double InterestRate
65 {
66 get
67 {
68 return _interestRate;
69 }
70
71 set
72 {
73 // 验证数据
74 if (value < 0.0)
75 {
76 Console.WriteLine("InterestRate 不能为负数");
77 return;
78 }
79 else
80 {
81 _interestRate = value / 100;
82 }
83 }
84 }
85 }
86
87
88 class TestSavingsAccount
89 {
90 /// <摘要>
91 /// 应用程序的主入口点。
92 /// </摘要>
93 [STAThread]
94 static void Main(string[] args)
95 {
96 // 创建 SavingsAccount 的对象
97 SavingsAccount objSavingsAccount = new SavingsAccount(12345, 5000);;
98 // 用户交互
99 Console.WriteLine("输入到现在为止已获得的利息和利率");
100 objSavingsAccount.InterestEarned = Int64.Parse(Console.ReadLine());
101 SavingsAccount.InterestRate = Int64.Parse(Console.ReadLine());
102
103 // 使用类名访问静态属性
104 objSavingsAccount.InterestEarned += objSavingsAccount.Balance * SavingsAccount.InterestRate;
105 Console.WriteLine("获得的总利息为: {0}", objSavingsAccount.InterestEarned);
106 }
107 }
108 }
索引器
[访问修饰符] 数据类型 this[数据类型 标识名]
{
get{};
set{}; //内置参数 value 用于传递数据
}
1 using System;
2
3 namespace Example_2
4 {
5 /// <摘要>
6 /// 该程序演示索引器的用法
7 /// </摘要>
8
9 // Photo 表示照片
10 // 这里的简单实现只包含标题。 更加实用的版本
11 // 可以包括文本描述和指向包含照片的文件链接。
12 class Photo
13 {
14 class Delegates
15 {
16
17 }
18
19 string _title;
20
21 public Photo(string title)
22 {
23 this._title = title;
24 }
25
26 public string Title
27 {
28 get
29 {
30 return _title;
31 }
32 }
33 }
34
35 // 此类表示相册,即照片的集合
36 class Album
37 {
38 //用于存储照片的数组
39 Photo[] photos;
40
41 // 用户创建相册时必须指定相册可以存放照片的张数。
42 // 为数组分配存储照片所需的确切大小。
43 public Album(int capacity)
44 {
45 photos = new Photo[capacity];
46 }
47
48 // 传递的索引用于对照片数组进行检索。
49 public Photo this[int index]
50 {
51 get
52 {
53 // 验证索引范围
54 if (index < 0 || index >= photos.Length)
55 {
56 Console.WriteLine("索引无效");
57 // 使用 null 指示失败
58 return null;
59 }
60
61 // 对于有效索引,返回请求的照片
62 return photos[index];
63 }
64
65 set
66 {
67 // 验证索引范围
68 if (index < 0 || index >= photos.Length)
69 {
70 Console.WriteLine("索引无效");
71
72 return;
73 }
74
75 //对于有效索引,向数组加载新的照片
76 photos[index] = value;
77 }
78 }
79
80 // 允许按标题查找照片
81 public Photo this[string title]
82 {
83 get
84 {
85 // 循环遍历数组中的所有照片
86 foreach (Photo p in photos)
87 {
88 // 将照片的标题与索引器参数进行比较
89 if (p.Title == title)
90 return p;
91 }
92 Console.WriteLine("未找到");
93
94 // 使用 null 指示失败
95 return null;
96 }
97 }
98 }
99
100 class TestIndexer
101 {
102 /// <摘要>
103 /// 应用程序的主入口点。
104 /// </摘要>
105 [STAThread]
106 static void Main(string[] args)
107 {
108 // 创建容量为 3 的相册
109 Album friends = new Album(3);
110
111 // 创建 3 张照片
112 Photo first = new Photo("Jenn");
113 Photo second = new Photo("Smith");
114 Photo third = new Photo("Mark");
115
116 // 向相册加载照片
117 friends[0] = first;
118 friends[1] = second;
119 friends[2] = third;
120
121 // 按索引进行检索
122 Photo obj1Photo = friends[2];
123 Console.WriteLine(obj1Photo.Title);
124
125 // 按名称进行检索
126 Photo obj2Photo = friends["Jenn"];
127 Console.WriteLine(obj2Photo.Title);
128 }
129 }
2
3 namespace Example_2
4 {
5 /// <摘要>
6 /// 该程序演示索引器的用法
7 /// </摘要>
8
9 // Photo 表示照片
10 // 这里的简单实现只包含标题。 更加实用的版本
11 // 可以包括文本描述和指向包含照片的文件链接。
12 class Photo
13 {
14 class Delegates
15 {
16
17 }
18
19 string _title;
20
21 public Photo(string title)
22 {
23 this._title = title;
24 }
25
26 public string Title
27 {
28 get
29 {
30 return _title;
31 }
32 }
33 }
34
35 // 此类表示相册,即照片的集合
36 class Album
37 {
38 //用于存储照片的数组
39 Photo[] photos;
40
41 // 用户创建相册时必须指定相册可以存放照片的张数。
42 // 为数组分配存储照片所需的确切大小。
43 public Album(int capacity)
44 {
45 photos = new Photo[capacity];
46 }
47
48 // 传递的索引用于对照片数组进行检索。
49 public Photo this[int index]
50 {
51 get
52 {
53 // 验证索引范围
54 if (index < 0 || index >= photos.Length)
55 {
56 Console.WriteLine("索引无效");
57 // 使用 null 指示失败
58 return null;
59 }
60
61 // 对于有效索引,返回请求的照片
62 return photos[index];
63 }
64
65 set
66 {
67 // 验证索引范围
68 if (index < 0 || index >= photos.Length)
69 {
70 Console.WriteLine("索引无效");
71
72 return;
73 }
74
75 //对于有效索引,向数组加载新的照片
76 photos[index] = value;
77 }
78 }
79
80 // 允许按标题查找照片
81 public Photo this[string title]
82 {
83 get
84 {
85 // 循环遍历数组中的所有照片
86 foreach (Photo p in photos)
87 {
88 // 将照片的标题与索引器参数进行比较
89 if (p.Title == title)
90 return p;
91 }
92 Console.WriteLine("未找到");
93
94 // 使用 null 指示失败
95 return null;
96 }
97 }
98 }
99
100 class TestIndexer
101 {
102 /// <摘要>
103 /// 应用程序的主入口点。
104 /// </摘要>
105 [STAThread]
106 static void Main(string[] args)
107 {
108 // 创建容量为 3 的相册
109 Album friends = new Album(3);
110
111 // 创建 3 张照片
112 Photo first = new Photo("Jenn");
113 Photo second = new Photo("Smith");
114 Photo third = new Photo("Mark");
115
116 // 向相册加载照片
117 friends[0] = first;
118 friends[1] = second;
119 friends[2] = third;
120
121 // 按索引进行检索
122 Photo obj1Photo = friends[2];
123 Console.WriteLine(obj1Photo.Title);
124
125 // 按名称进行检索
126 Photo obj2Photo = friends["Jenn"];
127 Console.WriteLine(obj2Photo.Title);
128 }
129 }
130 }