广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >浅谈C#索引器
  • 249
分享到

浅谈C#索引器

2024-04-02 19:04:59 249人浏览 安东尼
摘要

目录一、概要二、应用场景一、概要 索引器使你可从语法上方便地创建类、结构或接口,以便客户端应用程序可以像访问数组一样访问它们。编译器将生成一个 Item 属性(或者如果存在 Inde

一、概要

索引器使你可从语法上方便地创建类、结构或接口,以便客户端应用程序可以像访问数组一样访问它们。编译器将生成一个 Item 属性(或者如果存在 IndexerNameAttribute,也可以生成一个命名属性)和适当的访问器方法。在主要目标是封装内部集合或数组的类型中,常常要实现索引器。例如,假设有一个类 TempRecord,它表示 24 小时的周期内在 10 个不同时间点所记录的温度(单位为华氏度)。此类包含一个 float[] 类型的数组 temps,用于存储温度值。通过在此类中实现索引器,客户端可采用 float temp = tempRecord[4] 的形式(而非 float temp = tempRecord.temps[4] )访问 TempRecord 实例中的温度。索引器表示法不但简化了客户端应用程序的语法;还使类及其目标更容易直观地为其它开发者所理解。

语法声明:


public int this[int param]
{
    get { return array[param]; }
    set { array[param] = value; }
}

二、应用场景

这里分享一下设计封装的角度使用索引器,场景是封装一个Redishelper类。在此之前我们先看一个简单的官方示例。


using System;

class SampleCollection<T>
{
   // Declare an array to store the data elements.
   private T[] arr = new T[100];

   // Define the indexer to allow client code to use [] notation.
   public T this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value; }
   }
}

class Program
{
   static void Main()
   {
      var strinGCollection = new SampleCollection<string>();
      stringCollection[0] = "Hello, World";
      Console.WriteLine(stringCollection[0]);
   }
}
// The example displays the following output:
//       Hello, World.

RedisHelper类的封装(伪代码),这样用的好处是不用在需要设置redisdb号而大费周章。


public class RedisHelper
{
    private static readonly object _lockObj = new object();
    private static RedisHelper _instance;
    private int dbNum;

    private RedisHelper() { }

    public static RedisHelper Instance 
    {
        get 
        {
            if (_instance == null)
            {
                lock (_lockObj)
                {
                    if (_instance == null)
                    {
                        _instance = new RedisHelper();
                    }
                }
            }
            return _instance;
        }
    }

    public RedisHelper this[int dbid] 
    {
        get
        {
            dbNum = dbid;
            return this;
        }
    }

    public void StringSet(string content) 
    {
        Console.WriteLine($"StringSet to redis db { dbNum }, input{ content }.");
    }
}

调用:


RedisHelper.Instance[123].StringSet("测试数据");


运行效果:

到此这篇关于浅谈C#索引器的文章就介绍到这了,更多相关C#索引器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈C#索引器

本文链接: https://www.lsjlt.com/news/156346.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈C#索引器
    目录一、概要二、应用场景一、概要 索引器使你可从语法上方便地创建类、结构或接口,以便客户端应用程序可以像访问数组一样访问它们。编译器将生成一个 Item 属性(或者如果存在 Inde...
    99+
    2022-11-12
  • 浅谈Oracle索引
    Oracle中查询走索引的情况: 对返回的行无任何限定条件,即没有where子句。 未对数据表与任何索引主列相对应的行限定条件。 例如:在id-name-time列创建了三列复合索引,那么仅对name列限定条件不能使用这个索...
    99+
    2014-07-01
    浅谈Oracle索引
  • 浅谈MySQL聚簇索引
    目录1. 什么是聚簇索引2. 聚簇索引和主键3. 聚簇索引优缺点4. 最佳实践1. 什么是聚簇索引 数据库的索引从不同的角度可以划分成不同的类型,聚簇索引便是其中一种。 聚簇索引英文是 Clustered Index,有...
    99+
    2023-04-19
    MySQL索引 MySQL聚簇索引
  • 浅谈索引系列之本地索引与全局索引
    分区表按照类型可以分为范围分区(Range)、列表分区(List)以及哈希分区(Hash),表被分区后,其对应的索引也会与普通表的索引有所不同。 基本概念    &nb...
    99+
    2022-10-18
  • 浅谈MySQL索引优化分析
    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索...
    99+
    2022-10-18
  • 浅谈TypeScript 索引签名的理解
    目录1.什么是索引签名2. 索引签名语法3. 索引签名的注意事项3.1不存在的属性3.2 string 和 number 键4.索引签名与 Record<Keys, Type&...
    99+
    2022-11-12
  • 浅谈MySQL的B树索引与索引优化小结
    MySQL的MyISAM、InnoDB引擎默认均使用B+树索引(查询时都显示为“BTREE”),本文讨论两个问题: 为什么MySQL等主流数据库选择B+树的索引结构? 如何基于索引结构,理解常见的...
    99+
    2022-10-18
  • 浅谈Mysql主键索引与非主键索引区别
    目录什么是索引主键索引和普通索引的区别索引具体采用的哪种数据结构InnoDB使用的B+ Tree的索引模型,那么为什么采用B+ 树?这和Hash索引比较起来有什么优缺点?B+ Tre...
    99+
    2022-11-12
  • 浅谈MySQL中不等号索引问题
    目录1.当不等号<>作用在普通索引字段上2.当不等号<>作用在主键索引字段上3.当不等号<>作用在唯一索引字段上最近在使用mysql中的一个小总结。 在MySQL中,不等号<&g...
    99+
    2023-03-20
  • 浅谈MySQL为什么会选错索引
    目录1.引例2.优化器的逻辑3.解决办法1.引例 首先创建一张表,并对字段a,b分别建立索引: create table t ( id int(11) not null, a int(11) defaul...
    99+
    2023-03-20
    MySQL 选错索引
  • 浅谈Mysql哪些字段适合建立索引
    1 数据库建立索引常用的规则如下: 表的主键、外键必须有索引; 2、数据量超过300的表应该有索引; 3、经常与其他表进行连接的表,在连接字段上应该建立索引; 4、经常出现在Where子句中的字段,特别是...
    99+
    2022-05-25
    Mysql字段索引 Mysql 字段建立索引
  • 浅谈React 的引入
    目录1. CDN 引入1.1 react (先引入)1.2 react-dom (后引入)1.3 查看是否成功引入 react2. Webpack 引入3. create-react...
    99+
    2022-11-12
  • 浅谈mysql哪些情况会导致索引失效
    下面有一些培训教学机构的口诀和我个人的一些总结: 为了讲解以下索引内容,我们先建立一个临时的表 test02 CREATE TABLE `sys_user` ( `id` v...
    99+
    2022-11-12
  • 索引——谈谈你对索引的认识和理解
    为什么要用索引? 一般的应用系统,读写比例在10:1左右,插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得...
    99+
    2020-08-25
    索引——谈谈你对索引的认识和理解
  • 浅谈MYSQL引擎之INNODB引擎
    MYSQL 常用的引擎主要有一下几种,MRG_MYISAM 、CSV 、MyISAM、InnoDB、MEMORY ,NDB,其中MyISAM、InnoDB是mysql最常用的存储引擎,今天主要讨论 Inno...
    99+
    2022-10-18
  • 浅谈C++标准库
    目录C++模板 C++标准库 C++ 面向对象类库 string 标准模板库 vector setlist map queue priority_queue stack pair a...
    99+
    2022-11-12
  • 浅谈C#数组(一)
    目录一.简单数组之一维数组   1.数组的声明   2.数组的初始化3.访问数组元素4.数组中使用引用类型二.多维数组三.锯齿数组四.Array类1.创建数组2.复制数组3.排序五....
    99+
    2022-11-12
  • 浅谈C#数组(二)
    目录一.枚举集合 1.IEnumerator接口 2.foreach语句 3.yield语句 二.元组(Tuple) 三.结构比较 可以先了解上一篇文章内容C#数组(一) 一.枚举集...
    99+
    2022-11-12
  • 浅谈C++空间配置器allocator
    目录概述1. Allocator 的标准接口2. SGI STL 内存分配失败的异常处理3. SGI STL 内置轻量级内存池的实现4. SGI STL 内存池在多线程下的互斥访问概...
    99+
    2022-11-12
  • 浅谈用Python实现一个大数据搜索引擎
    搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索的基本原理。 布隆过滤器 (B...
    99+
    2022-06-04
    浅谈 搜索引擎 数据
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作