求大佬帮忙看看,在C#中,有参属性具体有什么作用?

C#只允许在对象上定义有参属性。

用起来就是:
Student s = new Student();
s[参数].........

给人感觉好奇怪。
这样做具体怎么运用到编程中?
所以,我就想到了在属性上定义的索引。
比如
textBox1.text[0]
这样不是更有意义吗?
但是貌似C#没有提供在属性上定义索引的方法。

蓝山帝景
浏览 156回答 2
2回答

largeQ

C#中的有参属性,就是索引器啊。索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于 属性,不同之处在于它们的访问器采用参数。索引器经常是在主要用于封装内部集合或数组的类型中实现的。 例如,假定具有一个名为 TempRecord 的类,此类表示在 24 小时内的 10 个不同时间记录的华氏度。此类包含一个表示温度的 float 类型的名为“temps”的数组和表示记录温度的日期的 DateTime。通过在此类中实现一个索引器,客户端可以通过 float temp =tr[4] 而不是 float temp = tr.temps[4] 语法访问TempRecord 实例中的温度。 索引器表示法不仅简化了客户端应用程序的语法,还使其他开发人员能够更加直观地理解类及其用途。class&nbsp;TempRecord{&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Array&nbsp;of&nbsp;temperature&nbsp;values&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;float[]&nbsp;temps&nbsp;=&nbsp;new&nbsp;float[10]&nbsp;{&nbsp;56.2F,&nbsp;56.7F,&nbsp;56.5F,&nbsp;56.9F,&nbsp;58.8F,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;61.3F,&nbsp;65.9F,&nbsp;62.1F,&nbsp;59.2F,&nbsp;57.5F&nbsp;};&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;To&nbsp;enable&nbsp;client&nbsp;code&nbsp;to&nbsp;validate&nbsp;input&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;when&nbsp;accessing&nbsp;your&nbsp;indexer.&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;Length&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;temps.Length;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Indexer&nbsp;declaration.&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;If&nbsp;index&nbsp;is&nbsp;out&nbsp;of&nbsp;range,&nbsp;the&nbsp;temps&nbsp;array&nbsp;will&nbsp;throw&nbsp;the&nbsp;exception.&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;float&nbsp;this[int&nbsp;index]&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;temps[index];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temps[index]&nbsp;=&nbsp;value;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;}}&nbsp;class&nbsp;MainClass{&nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;void&nbsp;Main()&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempRecord&nbsp;tempRecord&nbsp;=&nbsp;new&nbsp;TempRecord();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Use&nbsp;the&nbsp;indexer's&nbsp;set&nbsp;accessor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempRecord[3]&nbsp;=&nbsp;58.3F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempRecord[5]&nbsp;=&nbsp;60.1F;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Use&nbsp;the&nbsp;indexer's&nbsp;get&nbsp;accessor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;10;&nbsp;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Console.WriteLine("Element&nbsp;#{0}&nbsp;=&nbsp;{1}",&nbsp;i,&nbsp;tempRecord[i]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Keep&nbsp;the&nbsp;console&nbsp;window&nbsp;open&nbsp;in&nbsp;debug&nbsp;mode.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Console.WriteLine("Press&nbsp;any&nbsp;key&nbsp;to&nbsp;exit.");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Console.ReadKey();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}}/*&nbsp;Output:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#0&nbsp;=&nbsp;56.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#1&nbsp;=&nbsp;56.7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#2&nbsp;=&nbsp;56.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#3&nbsp;=&nbsp;58.3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#4&nbsp;=&nbsp;58.8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#5&nbsp;=&nbsp;60.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#6&nbsp;=&nbsp;65.9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#7&nbsp;=&nbsp;62.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#8&nbsp;=&nbsp;59.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Element&nbsp;#9&nbsp;=&nbsp;57.5&nbsp;&nbsp;&nbsp;&nbsp;*/C# 并不将索引类型限制为整数。 例如,对索引器使用字符串可能是有用的。 通过搜索集合内的字符串并返回相应的值,可以实现此类索引器。 由于访问器可被重载,字符串和整数版本可以共存。在此例中,声明了存储星期几的类。 声明了一个get 访问器,它接受字符串(天名称),并返回相应的整数。 例如,星期日将返回 0,星期一将返回 1,等等。// Using a string as an indexer valueclass DayCollection{&nbsp; &nbsp; string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };&nbsp; &nbsp; // This method finds the day or returns -1&nbsp; &nbsp; private int GetDay(string testDay)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; for (int j = 0; j < days.Length; j++)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (days[j] == testDay)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return j;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");&nbsp; &nbsp; }&nbsp; &nbsp; // The get accessor returns an integer for a given string&nbsp; &nbsp; public int this[string day]&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (GetDay(day));&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}class Program{&nbsp; &nbsp; static void Main(string[] args)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; DayCollection week = new DayCollection();&nbsp; &nbsp; &nbsp; &nbsp; System.Console.WriteLine(week["Fri"]);&nbsp; &nbsp; &nbsp; &nbsp; // Raises ArgumentOutOfRangeException&nbsp; &nbsp; &nbsp; &nbsp; System.Console.WriteLine(week["Made-up Day"]);&nbsp; &nbsp; &nbsp; &nbsp; // Keep the console window open in debug mode.&nbsp; &nbsp; &nbsp; &nbsp; System.Console.WriteLine("Press any key to exit.");&nbsp; &nbsp; &nbsp; &nbsp; System.Console.ReadKey();&nbsp; &nbsp; }}// Output: 5
打开App,查看更多内容
随时随地看视频慕课网APP