C#核心(7)索引器

前言

上一节我们讲解了非常晕脑袋的成员属性,不知道各位有没有下去好好练习,但是时间不等人,我们继续来讲封装相关的索引器。索引器相对来说会简单很多,大家放轻松。

在C#中,索引器(Indexer)是一种特殊的属性(Property)类型,允许我们通过类似于数组的方式访问一个类的实例。它允许我们定义一个类的实例的集合,并且可以像访问数组一样使用索引的方式访问集合中的元素。

索引器实际上是一种定义在类中的特殊方法,它允许我们通过类似于数组的方式使用特定的参数访问类的实例。通过使用索引器,我们可以像访问数组元素一样访问类中的一组相关元素。

索引器可以有一个或多个参数,并且可以是任何合法的数据类型。我们可以定义不同类型的索引器以提供不同的访问方式。索引器可以具有get和set访问器,允许我们在类的外部获取和设置索引器的值。

基本概念

让对象可以向数组一样通过索引访问其中元素,使程序看起来更直观,更容易被编写

为什么要有这个东西,简单举个例子,你如果开发了一个社交游戏,肯定好友不止一个,好友我们可以看做是这个玩家的一个属性,那我们就需要索引器来帮助我们了。

索引器语法

cs 复制代码
访问修饰符 返回值 this[参数类型 参数名,参数类型 参数名...]
{
    内部的写法和规则同成员属性
    get{}
    set{}
}

例子和使用

我们还是用游戏社交来举例子,这是得到我的游戏好友。

c# 复制代码
class GameSocial
{
    private string[] members;
    
    public GameSocial(int size)
    {
        members = new string[size];
    }
    
    // 索引器
    public string this[int index]
    {
        get { return members[index]; }//你可以在这里写逻辑,进行一些操作
        set { members[index] = value; }
    }
    
    public int Length
    {
        get { return members.Length; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        GameSocial gameSocial = new GameSocial(10);//假设我有十个好友
        
        // 添加成员名单
        gameSocial[0] = "Alice";//给他们命名,当然你可以给他们其他的值
        gameSocial[1] = "Bob";
        gameSocial[2] = "Charlie";
        
        // 获取成员名单
        for (int i = 0; i < gameSocial.Length; i++)
        {
            Console.WriteLine(gameSocial[i]);
        }
    }
}
 

当然,你可能也会有成员属性和成员变量一样的困惑,这不跟直接在类里弄一个数组道理是一样的吗?

这里郑重声明:直接给类中的数组赋值是简单快捷的方法,但会共享相同的内存位置,可能会导致意外的副作用。通过索引器给数组赋值则提供了更多的控制和灵活性,但相对来说更复杂一些。取决于具体的需求和场景,选择合适的方法来赋值。

通过索引器给数组赋值是通过对类的索引器进行调用来修改数组元素的值。在索引器的实现中,你可以对传入的索引执行一些辅助逻辑。这意味着你可以在设置数组元素之前进行一些验证或转换操作。此外,通过索引器赋值是在使用特定的语法和方法来修改数组元素,这可以提供更多的灵活性和控制。

索引器中可以写逻辑!(报错处理等)

索引器可以重载(处理不同参数的传入)

总结

索引器的这一块其实就是一个拆解开的数组逻辑处理,我们可以在赋值的时候进行更多我们自己想进行的操作,其实在你学完成员属性和成员变量后,这一块就相对简单了。

当然,最主要的还是你自己多敲代码,这些东西可能再unity初期开发当中使用较少,但是它不可避免,所以务必脚踏实地好好学习。

请期待我的下一篇文章!共勉!

我来自佑梦游戏开发,欢迎你的关注和订阅!

相关推荐
远望清一色3 分钟前
基于MATLAB边缘检测博文
开发语言·算法·matlab
何曾参静谧11 分钟前
「Py」Python基础篇 之 Python都可以做哪些自动化?
开发语言·python·自动化
Prejudices15 分钟前
C++如何调用Python脚本
开发语言·c++·python
我狠狠地刷刷刷刷刷28 分钟前
中文分词模拟器
开发语言·python·算法
wyh要好好学习31 分钟前
C# WPF 记录DataGrid的表头顺序,下次打开界面时应用到表格中
开发语言·c#·wpf
AitTech32 分钟前
C#实现:电脑系统信息的全面获取与监控
开发语言·c#
qing_04060334 分钟前
C++——多态
开发语言·c++·多态
孙同学_34 分钟前
【C++】—掌握STL vector 类:“Vector简介:动态数组的高效应用”
开发语言·c++
froginwe1135 分钟前
XML 编辑器:功能、选择与使用技巧
开发语言
Jam-Young41 分钟前
Python的装饰器
开发语言·python