当前位置: 首页 > news >正文

C#-类:索引器

索引器作用:可以让我们以中括号的形式访问自定义类中的元素。

规则自己定,访问时和数组一样

适用于,在类中有数组变量时使用,可以方便的访问、进行逻辑处理

可以重载,结构体也支持索引器

一:索引器的语法

使用索引器要做好备注,方便调用者知道调用的是什么类型的数据。因为索引器可以重载,需要明确声明的索引器所关联的变量是什么(其实就是用不同的参数来区分关联的变量)

使用索引器时一般是调用数组数据,注意,可在get,set内部做好判空和越界判断

1.1 使用索引器关联数组变量
class Person{private Person[] friends;//一般要有配套的数组变量public Person this[int index, ... ]{//内部的写法和规则和索引器相同get{return friends[index]};set{friends[index] = value;}//value代表传入的值。在这里就是new的Person类型的变量}
}
------------
void Main(){Person p = new Person();p[0] = new Person();//调用了setConsole.WriteLine(p[0]);//调用了get
}
//只做语法演示,代码本身没有实际意义
 1.2 直接调用数组变量
class Person{private Person[] friends;
}
------------
void Main(){Person p = new Person();p.friends[0] = new Person();Console.WriteLine(p.friends[0]);
}
//只做语法演示,代码本身没有实际意义

二:索引器的使用

2.1 索引器的完整写法、索引器的重载
class Person{private string name;private int age;private int[,] array;     //声明索引器public int this[int i, int j]     //public string this[string str]{//内部的写法和规则和索引器相同get{return array[i, j];}set{array[i, j] = value;//value代表传入的值,这里是Person类型的}}private Person[] friends;//索引器重载2public Person this[int index]{  get{//可以写逻辑的 根据需求来处理这里面的内容if( friends == null ||friends.Length - 1 < index){return null;}return friends[index];}set{//value代表传入的值if( friends == null ){friends = new Person[] { value };}else if(index > friends.Length - 1){//自己定了一个规则 如果索引越界 就默认把最后一个朋友顶掉friends[friends.Length - 1] = value;}friends[index] = value;}}//索引器重载3public string this[string str]{get{switch(str){case "name":return this.name;break;case "age":return this.age.ToString();break;}return "";}
}class Program{static void Main(string[] args){Console.WriteLine("索引器");Person p = new Person();p[0] = new Person();Console.WriteLine(p[0]);p[0, 0] = 10;}}
}
2.2 索引器的应用示例
class Test{private string[] name = new string[10];public string this[int index]{get{ return name[index];}set{ name[index] = value;}}
}Main(){Test t=new Test();t[0]="张三";t[1]="李四";Console.WriteLine(t[0]);Console.WriteLine(t[1]);
}
class Week{private string[] days={"Mon","Tues","Wed","Thurs","Fri","Sat","Sun"};private int GetDay(string day){int i=0;foreach(string temp in days){if(temp==day)return i+1;i++;}return -1;}public int this[string day]{get{ return GetDay(day);}}
}
Main(){Week w=new Week();Console.WriteLine(w["Thurs"]);Console.WriteLine(w.GetDay("Thurs"));    
}

索引器练习题


http://www.mrgr.cn/news/66450.html

相关文章:

  • 简易CPU设计入门:译码模块(一)
  • 借助 Aspose.Words,使用 C# 从 Word 文档中删除页面
  • [实战-11] FlinkSql 设置时区对TIMESTAMP和TIMESTAMP_LTZ的影响
  • GitHub中搜索项目方法
  • Chromium Mojo(IPC)进程通信演示 c++(1)
  • 开源呼叫中心系统 FreeIPCC:WebRTC 详解
  • 【xml转JSON】
  • windows_worm
  • 信号与噪声分析——第三节:随机过程的统计特征
  • 对于IIC的理解
  • 蓝桥杯2021年题解(IP补充)
  • QStackedWidget使用实例
  • Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档
  • 【C++篇】在秩序与混沌的交响乐中: STL之map容器的哲学探寻
  • 一些常规IP核功能
  • HOT100_最大子数组和
  • 一款功能强大的开源文档管理系统,将物理文档转换为可搜索的在线档案,实现无纸化办公工具(带私活源码)
  • Spring Data Redis的基本使用
  • 【大模型】深度解析:智能体如何突破 RAG 的三大技术瓶颈
  • 力扣最热一百题——验证二叉搜索树
  • 七牛云OSS的使用
  • QT/QT QUICK与前端WEB开发的区别
  • 深入理解对象池 sync.Pool
  • css过渡用法
  • AutoCAD2024
  • CLIP-Driven Universal Model for Organ Segmentation and Tumor Detection论文解读和实验复现