我尝试更改方括号运算符的行为。 现在我的问题是,如果它甚至可以做到这一点。
我知道我可以用这样的东西为String创建一个扩展方法:
public static class StringExtension
{
public static char Substring(this string value, int position)
{
//do something
}
}
但是如何覆盖方括号运算符? 这不会起作用:
public static class StringExtension
{
public static char this[this string value, int position]
{
//do something
}
}
怎么做呢。或者甚至可能吗?
答案 0 :(得分:2)
让我们一次处理一个概念。
The square bracket operators用于索引聚合对象:
此外,它们用于表示属性,但这与此答案无关。
现在,字符串不是数组,因此字符串对象具有this[...]
属性。
您的问题:“如何覆盖方括号运算符?”有这个答案:简单地说,你可以覆盖任何其他属性,提供,你可以:
对于字符串,标准都是禁止的:
System.String
类型的使用。对于字符串,覆盖这个?不,不能做。
然后,您展示了一个示例,它与扩展方法的语法类似。
在继续之前回顾一下:
是的,您肯定可以向字符串添加扩展方法,但是您无法提供扩展属性(尚未)。
新的Roslyn编译器项目有很多为它建议的功能,包括Extension Everything功能,可以解决这个问题。但是,它尚未决定,也没有计划或实施。
你可以创建一个普通的扩展方法,你无法重新定义,覆盖或扩展[...]
运算符所做的事情。
public static class StringExtension
{
public static char CharAt(this string value, int position)
{
//do something
}
}
用法:
string s = "Test";
char c = s.CharAt(2);