为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
蓝山帝景 2021-07-21 21:15:58
C#只允许在对象上定义有参属性。用起来就是:Student s = new Student();s[参数].........给人感觉好奇怪。这样做具体怎么运用到编程中?所以,我就想到了在属性上定义的索引。比如textBox1.text[0]这样不是更有意义吗?但是貌似C#没有提供在属性上定义索引的方法。
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

C#中的有参属性,就是索引器啊。

索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于 属性,不同之处在于它们的访问器采用参数。

索引器经常是在主要用于封装内部集合或数组的类型中实现的。 例如,假定具有一个名为 TempRecord 的类,此类表示在 24 小时内的 10 个不同时间记录的华氏度。
此类包含一个表示温度的 float 类型的名为“temps”的数组和表示记录温度的日期的 DateTime。
通过在此类中实现一个索引器,客户端可以通过 float temp =
tr[4] 而不是 float temp = tr.temps[4] 语法访问
TempRecord 实例中的温度。 索引器表示法不仅简化了客户端应用程序的语法,还使其他开发人员能够更加直观地理解类及其用途。


class TempRecord{    // Array of temperature values    private float[] temps = new float[10] { 56.2F, 56.7F, 56.5F, 56.9F, 58.8F,                                             61.3F, 65.9F, 62.1F, 59.2F, 57.5F };     // To enable client code to validate input     // when accessing your indexer.    public int Length    {        get return temps.Length; }    }    // Indexer declaration.    // If index is out of range, the temps array will throw the exception.    public float this[int index]    {        get        {            return temps[index];        }         set        {            temps[index] = value;        }    }} class MainClass{    static void Main()    {        TempRecord tempRecord = new TempRecord();        // Use the indexer's set accessor        tempRecord[3] = 58.3F;        tempRecord[5] = 60.1F;         // Use the indexer's get accessor        for (int i = 0; i < 10; i++)        {            System.Console.WriteLine("Element #{0} = {1}", i, tempRecord[i]);        }         // Keep the console window open in debug mode.        System.Console.WriteLine("Press any key to exit.");        System.Console.ReadKey();     }}/* Output:        Element #0 = 56.2        Element #1 = 56.7        Element #2 = 56.5        Element #3 = 58.3        Element #4 = 58.8        Element #5 = 60.1        Element #6 = 65.9        Element #7 = 62.1        Element #8 = 59.2        Element #9 = 57.5    */


C# 并不将索引类型限制为整数。 例如,对索引器使用字符串可能是有用的。 通过搜索集合内的字符串并返回相应的值,可以实现此类索引器。 由于访问器可被重载,字符串和整数版本可以共存。

在此例中,声明了存储星期几的类。 声明了一个
get 访问器,它接受字符串(天名称),并返回相应的整数。 例如,星期日将返回 0,星期一将返回 1,等等。


// Using a string as an indexer value

class DayCollection

{

    string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };


    // This method finds the day or returns -1

    private int GetDay(string testDay)

    {


        for (int j = 0; j < days.Length; j++)

        {

            if (days[j] == testDay)

            {

                return j;

            }

        }


        throw new System.ArgumentOutOfRangeException(testDay, "testDay must be in the form \"Sun\", \"Mon\", etc");

    }


    // The get accessor returns an integer for a given string

    public int this[string day]

    {

        get

        {

            return (GetDay(day));

        }

    }

}


class Program

{

    static void Main(string[] args)

    {

        DayCollection week = new DayCollection();

        System.Console.WriteLine(week["Fri"]);


        // Raises ArgumentOutOfRangeException

        System.Console.WriteLine(week["Made-up Day"]);


        // Keep the console window open in debug mode.

        System.Console.WriteLine("Press any key to exit.");

        System.Console.ReadKey();

    }

}

// Output: 5



查看完整回答
反对 回复 2021-07-25
  • 2 回答
  • 0 关注
  • 155 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信