了解索引器、密封类、扩展方法等

来源:互联网 发布:类似ninjame的软件 编辑:程序博客网 时间:2024/04/28 23:04

​一、索引器
索引器可以根据数字、字符串等进行索引,也可以使用多个索引器参数,平时使用地不多,在.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);





原创粉丝点击