C#索引器的重载代码?
时间: 2024-09-06 12:01:34 浏览: 22
在C#中,虽然标准做法是为一个数据结构提供单一的索引访问方式,但如果真的需要,你可以为不同的键类型编写索引器重载。这通常不是推荐的做法,但在某些特殊场景下是可以的。下面是一个简单的例子,展示了如何为两个不同的键类型(比如`int`和`string`)重载同一个索引器名称:
```csharp
public class MyCollection<T>
{
private Dictionary<T, object> collection;
// 索引器重载 - 用于int类型的键
public object this[int index]
{
get { return collection[index]; }
set { collection[index] = value; }
}
// 另一个索引器重载 - 用于string类型的键
public object this[string key]
{
get { return collection[key]; }
set { collection[key] = value; }
}
}
```
在这里,`this[int index]`和`this[string key]`都指向同一个`Dictionary`,但是它们实际上是不同的方法,针对不同的键类型提供了访问。
相关问题
C#索引器的重载和使用代码?
C#中的索引器(Indexers)是一种特殊类型的属性,允许我们通过方括号[]语法访问集合元素,就像数组一样。索引器可以重载,意味着你可以定义多个索引器,每个接受不同的参数组合。这增加了灵活性,可以适应不同类型的数据访问。
重载索引器的基本语法如下:
```csharp
public class MyClass {
// 简单的整数索引器
public int this[int index] { get; set; }
// 可以包含多个参数,如字符串索引
public string this[char key] { get; set; }
// 或者使用更复杂的逻辑,例如获取范围内的元素
public List<int> this[int startIndex, int endIndex] { get; }
}
```
使用索引器示例:
```csharp
MyClass obj = new MyClass();
obj[0] = 5; // 设置整数索引为5
string value = obj['a']; // 获取字符'a'对应的值
List<int> range = obj[1, 3]; // 获取从第1个到第3个元素
```
c#中substring
在C#中,Substring是一个用于提取字符串的方法。它允许你从一个字符串中获取指定位置和长度的子字符串。
Substring方法有两种重载形式:
1. 使用起始索引和子字符串长度作为参数:`string.Substring(int startIndex, int length)`
这种形式的Substring方法允许你指定起始索引和子字符串的长度来提取子字符串。起始索引表示子字符串的起始位置,而长度表示子字符串的长度。
2. 使用起始索引作为参数:`string.Substring(int startIndex)`
这种形式的Substring方法允许你只指定起始索引来提取子字符串。它会从指定的起始索引一直提取到字符串的末尾。
下面是一个示例代码,演示如何使用Substring方法提取子字符串:
```csharp
string str = "Hello, World!";
string subStr1 = str.Substring(7, 5); // 从索引7开始提取长度为5的子字符串
string subStr2 = str.Substring(7); // 从索引7开始提取到末尾的子字符串
Console.WriteLine(subStr1); // 输出 "World"
Console.WriteLine(subStr2); // 输出 "World!"
```
注意,C#中的字符串索引是从0开始的,所以起始索引7表示第8个字符。