静态引用
声明静态引用
引用命名空间时,可以在using后面加static修饰符。
然后把要引用的命名空间改为带命名空间的一个具体的类。
这称为静态引用。
using static System.Int32;
using static System.Console;
int a = Parse(ReadLine());
静态引用的效果
静态引用一个类后,可以直接使用这个类下的所有静态成员,包括:
- 静态成员
- 常量
- 枚举值
- 嵌套类
当然,如果引用的类中有同名的静态成员,还是需要通过类名来调用。
静态引用并不能使用别名。
扩展方法
声明扩展方法
在顶级(不是嵌套类)的静态类中,可以声明扩展方法。
声明扩展方法的语法是:
声明一个普通的带参数的静态方法,把第一个参数的类型前面加上关键字this。
static class Tesk
{
public static int ToInt32(this string s)
{
return int.Parse(s);
}
public static bool IsNull(this string s)
{
return s == null || s == "";
}
}
使用扩展方法
扩展方法除了能像原本的静态方法一样使用,还能直接从扩展的类型的实例上调用。
例如,这两个方法加了this的都是string类型。
那么声明一个string类型,然后你会发现,这个实例可以点出来扩展方法
string s = null;
s.ToInt32();
扩展方法的this参数就是调用者本身。所以需要填的参数列表需要省略第一个参数。
扩展方法的特点
扩展方法和直接调用静态方法的本质是一样的,所以扩展方法相较于正真的实例方法:
- 在实例为null时,进入扩展方法不会报错(如果扩展方法里访问了实例的内容,还是会报错)
- 可以为枚举添加方法
- 在实例方法本身有同名同参数列表的方法时,扩展方法无效。
- 在有多个同名同参数列表的方法时,无法以扩展方法形式调用。