了解索引器、密封类、扩展方法等
一、索引器
索引器可以根据数字、字符串等进行索引,也可以使用多个索引器参数,平时使用地不多,在.net框架中可以见到,比如string类的索引器可以获取某个位置的字符:
string s = "abc";
char c = s[1];
public char this[int index] { get; }
索引器与属性类似,也可以有get、set两部分,写法为this[...]。
class Person {
public string this[int x, int y] {
get {
return x + "-" + y;
}
set {
Console.WriteLine("x={0},y={1},value={2}", x, y, value);
}
}
}
var p1 = new Person();
p1[1, 2] = "p1";
var ps = p1[3, 4];
反编译索引器可以看到它也和属性一样分为get_Item和set_Item两部分,对于Person的索引器,get部分有x、y两个参数,set部分还多了隐藏的value参数。
二、密封类和静态类
a)密封类用sealed修饰,这样的类就不能被继承了。这也多见于.net框架中,比如string类型等,是出于安全方面的考虑,禁止了对基本类型的继承。
b)静态类用static修饰。静态类无法实例化、无法创建子类,只能声明static成员;但非静态类内部可以声明static成员
三、扩展方法
扩展方法可以用来为基本数据类型扩展,也可以为自定义类扩展。下面扩展了string.IsEmail()方法。
static class Ext {
public static bool IsEmail(this string s) {
return true;
}
}
扩展方法必须是static类,而且第一个参数类型必须是被扩展的类型。
字符串ps="ps@ps.ps";那么可以用下面的两种方式使用IsEmail扩展方法,因为IsEmail其实也是静态类的方法。
ps.IsEmail();
Ext.IsEmail(ps);