C# 索引器示例

C# 索引器示例,c#,indexer,C#,Indexer,我正在学习索引器,偶然发现了我正在阅读的教程的解释和示例 它说: “索引器允许对对象(如数组)进行索引。为类定义索引器时,此类的行为类似于虚拟数组。然后,您可以使用数组访问运算符([])访问此类的实例。” 我对这一段的理解是,您可以使用数组访问操作符访问该类的实例 但我真的不明白这种解释是这样的: 索引器的行为声明在某种程度上类似于属性。与属性类似,使用get和set访问器定义索引器。但是,属性返回或设置特定的数据成员,而索引器从对象实例返回或设置特定的值。换句话说,它将实例数据分成更小的部分,

我正在学习索引器,偶然发现了我正在阅读的教程的解释和示例

它说:

“索引器允许对对象(如数组)进行索引。为类定义索引器时,此类的行为类似于虚拟数组。然后,您可以使用数组访问运算符([])访问此类的实例。”

我对这一段的理解是,您可以使用数组访问操作符访问该类的实例

但我真的不明白这种解释是这样的:

索引器的行为声明在某种程度上类似于属性。与属性类似,使用get和set访问器定义索引器。但是,属性返回或设置特定的数据成员,而索引器从对象实例返回或设置特定的值。换句话说,它将实例数据分成更小的部分,并对每个部分进行索引,获取或设置每个部分。“

我没有得到“它将实例数据分成更小的部分,并对每个部分进行索引”

在此之后,它给出了一个索引器示例:

using System;
namespace IndexerApplication
{
   class IndexedNames
   {
      private string[] namelist = new string[size];
      static public int size = 10;
      public IndexedNames()
      {
         for (int i = 0; i < size; i++)
         namelist[i] = "N. A.";
      }

      public string this[int index]
      {
         get
         {
            string tmp;

            if( index >= 0 && index <= size-1 )
            {
               tmp = namelist[index];
            }
            else
            {
               tmp = "";
            }

            return ( tmp );
         }
         set
         {
            if( index >= 0 && index <= size-1 )
            {
               namelist[index] = value;
            }
         }
      }

      static void Main(string[] args)
      {
         IndexedNames names = new IndexedNames();
         names[0] = "Zara";
         names[1] = "Riz";
         names[2] = "Nuha";
         names[3] = "Asif";
         names[4] = "Davinder";
         names[5] = "Sunil";
         names[6] = "Rubic";
         for ( int i = 0; i < IndexedNames.size; i++ )
         {
            Console.WriteLine(names[i]);
         }

         Console.ReadKey();
      }
   }
}
使用系统;
命名空间索引器应用程序
{
类索引名称
{
私有字符串[]名称列表=新字符串[大小];
静态公共int size=10;
公共指数名称()
{
对于(int i=0;i如果(index>=0&&index=0&&index,它实际上只是给出了一个使用索引器的示例。从数组返回元素在某种程度上就是返回数组的一部分

但是它不需要是数组。例如,
字符串
有一个索引器,它返回该位置的字符,例如
“test”[0]
返回位置为零的字符,即
't'

其他对象可能具有执行其他操作的其他索引器。例如,DataTable DataRowCollection具有按编号返回行的索引器,以及具有按名称返回列的索引器:

myDataTable.Rows[12]["ID"].Value

它的意思是,这是一种访问类的一部分的方法-你可以索引到一个字符串中,从字符串中获取单个
char
,例如
char c=string[0]
。你可以索引到一个列表中,从列表中获取单个项目(例如,一个较小的部分)。
var item=list[1]
。这是一种模糊的语言,他们试图避免过于具体。因此,让我们具体一点,当您的类表现为集合时,您应该编写一个索引器。嗨,汉斯,谢谢您真正使用索引器。当您说“当您的类表现为集合时”“你是说该类的一个类成员是一个集合?你能给我一个实际类的例子,它的行为类似于一个集合吗?这就是对象的“较小部分”的含义。如果数组中的所有元素都是整个数组,则返回该数组的一个元素就是该“较小部分”。字符串也是如此。”(您给出的示例)。因此,在这个示例中,创建一个字符串数组,它以“N.A”完成。这个数组是IndexedNames类的成员类,如果您想要数组的第一个元素,为什么不调用例如“namelist[0]”呢?