鱼C论坛

 找回密码
 立即注册
查看: 3030|回复: 8

[已解决]C#中的this到底指代是什么

[复制链接]
发表于 2020-5-13 20:05:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. using System;
  2. class Indexr//利用两个数组,两个索引器,一个函数,做一个字典
  3.     //在data数组里存value,在keys数组里存key
  4.     //通过一个函数从keys数组中的字符串找对应的value数组中的字符串


  5. {
  6.     private string[] data = new string[6];//声明有6个字符串的数组,此时是6个null?
  7.     //声明有6个字符串的数组
  8.     private string[] keys =
  9.     {
  10.         "1","2","3","4","5","6"
  11.     };
  12.     //用两种方法来索引
  13.     //1,整数做下标,2,关键词作下标
  14.     //是不是可以理解为利用数组,做了一个字典?
  15.     public string this[int idx]//this指的是成为对象的类,这边做的是以整数为下标的
  16.     //使用以data这数组,把值赋入data这个数组
  17.     {
  18.         set
  19.         {
  20.             //用此设置值?,对象中设置: 类对象[数字]=value
  21.             if (idx >= 0 && idx < data.Length)
  22.                 data[idx] = value;//重点:data数组的下标等于value
  23.         }
  24.         get
  25.         {
  26.             if (idx >= 0 && idx < data.Length)
  27.                 return data[idx];
  28.             return null;
  29.         }
  30.     }
  31.     public string this[string key]//关键字索引器
  32.     {
  33.         set
  34.         {
  35.             int idx = findkey(key);//这边应该先要做一个输入的key与数字下标对应的函数
  36.             this[idx] = value;//这边也是可以设置的value,this是哪个数组?
  37.         }
  38.         get
  39.         {
  40.             return this[findkey(key)];//这边的当前对象是哪个数组?
  41.         }
  42.     }
  43.     private int findkey(string key)
  44.     //***这边是输入关键词,返回需要的下标数字的函数
  45.     {
  46.         for (int i = 0; i < keys.Length; i++)
  47.             if (keys[i] == key)//如果keys数组的第几个==关键词的话,输出第几个
  48.                 return i;
  49.         return -1;
  50.     }
  51.     static void Main()
  52.     {
  53.         Indexr r = new Indexr();
  54.         //类加[]为索引器
  55.         r[0] = "马克";//为类对象设置value
  56.         r[1] = "图文";
  57.         r[2] = "汤姆";
  58.         Console.WriteLine(r["1"]);
  59.         Console.WriteLine(r["2"]);
  60.         Console.WriteLine(r["3"]);
复制代码


我看到是说指代当前对象应该也就是这个类,但是在this[idx] = value和return this[findkey(key)]这里,明显this就是说的data这个数组,为啥不是keys这个数组呢?
最佳答案
2020-5-14 13:44:38
类,是对具有某种,某几种特种的事物的抽象,是一个虚拟的概念。
对象,是具有某种特征的一个实际个体。

比如说,全世界的人,有一个共同的类: 人类。我们每一个真实的人(无论或者还是死了)都是"人类"这个类的一个对象。

this 指针,指代当前对象,如果这对象是你, ghsydota, this 就是你,如果这个对象是 fygod, 那 this 就是 fygod。

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-13 20:31:22 | 显示全部楼层
跟任何语言一样,本类对象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-13 20:46:36 | 显示全部楼层
链接:https://pan.baidu.com/s/1uKSqxJspB6gUPPdQYmW1lA
提取码:b89m,嗯,,,不知道那里来的一个pdf,楼主可以去看看有没有用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 12:44:14 | 显示全部楼层
还是不明白啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 13:44:38 | 显示全部楼层    本楼为最佳答案   
类,是对具有某种,某几种特种的事物的抽象,是一个虚拟的概念。
对象,是具有某种特征的一个实际个体。

比如说,全世界的人,有一个共同的类: 人类。我们每一个真实的人(无论或者还是死了)都是"人类"这个类的一个对象。

this 指针,指代当前对象,如果这对象是你, ghsydota, this 就是你,如果这个对象是 fygod, 那 this 就是 fygod。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 14:09:22 | 显示全部楼层
赚小钱 发表于 2020-5-14 13:44
类,是对具有某种,某几种特种的事物的抽象,是一个虚拟的概念。
对象,是具有某种特征的一个实际个体。
...
  1. public string this[string key]//关键字索引器
  2.     {
  3.         set
  4.         {
  5.             int idx = findkey(key);//这边应该先要做一个输入的key与数字下标对应的函数
  6.             this[idx] = value;//这边也是可以设置的value,this是哪个数组?
  7.         }
  8.         get
  9.         {
  10.             return this[findkey(key)];//这边的当前对象是哪个数组?
  11.         }
  12.     }
复制代码

那这里,索引器里的两个this对象都是指代data这个数组,但是还有key数组呀,为啥计算鸡选了data数组,没选key这个数组呢,我如果取出数据,运行的不是findkey()这个函数吗?而在这个函数里用到的是key这个数组,那this指代的不更可能是key这个数组吗?
但是这个this直接把对象当成data数组,这是为啥?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 14:14:32 | 显示全部楼层
ghsydota 发表于 2020-5-14 14:09
那这里,索引器里的两个this对象都是指代data这个数组,但是还有key数组呀,为啥计算鸡选了data数组,没选k ...

https://docs.microsoft.com/zh-cn ... xers/using-indexers

先说,我不会 c# 。文档给我的感觉是,运算符重载可允许任意类型,通过索引,像数组一样使用。
这就是一个语法糖,将 "[]" 看作一个函数名,接收一个整型变量(我不确定负数是否可以)。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-14 15:25:56 | 显示全部楼层
赚小钱 发表于 2020-5-14 14:14
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/indexers/using-indexers

先说, ...

好像跟我问的没啥关系..我想知道this的指代问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-14 15:31:46 | 显示全部楼层
ghsydota 发表于 2020-5-14 15:25
好像跟我问的没啥关系..我想知道this的指代问题

那就看我上面的回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 02:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表