对于使用static修饰的静态类,我们可以通过类.来访问此静态类中的成员,在C#6新增特性中,我们可以使用using static这种新语法来简化对于静态类中数据的使用。
通常情况下,我们使用静态类Console的静态方法WriteLine输出如下代码。
using System;
namespace lianxi
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("9999");
}
}
}
可以使用using static来简略此方法的使用。此方法使用后便可以在当前这个作用域内,直接来使用静态类Console的所有静态成员了,而不必加Console.。
using static System.Console; //使用using static
namespace lianxi
{
public class Program
{
static void Main(string[] args)
{
WriteLine("8888");
}
}
}
using static也可以使用在非静态类型上(如class、struct、enum)
对与非静态的class和struct,只能使用它们的静态成员。对应的静态成员包括:静态方法、静态字段、静态属性、静态事件
using static System.ConsoleColor; //枚举
using static lianxi.A; //非静态class
using static lianxi.B; //非静态struct
namespace lianxi
{
class A
{
public static void foo() { Console.WriteLine("A"); }
}
struct B
{
public static void func() { Console.WriteLine("B"); }
}
public class Program
{
static void Main(string[] args)
{
foo(); //直接使用
func(); //直接使用
Console.WriteLine((int)DarkGreen);
Console.WriteLine(DarkGreen);
}
}
}
其他类静态同名成员与本类静态同名成员的优先级
俩者签名相同时,现有静态成员优先级更高,
using static System.Console;
namespace lianxi
{
public class Program
{
public static void WriteLine(string s)
{
System.Console.WriteLine("静态成员优先级更高!");
}
static void Main(string[] args)
{
WriteLine("111"); //打印静态成员优先级更高!
}
}
}
俩个其他类中静态成员同名会产生二义性
当俩个其他类中有同名的成员时,使用using static将俩者包含,则在调用的时候会产生二义性。
using static System.Console;
using static lianxi.A;
namespace lianxi
{
public class A
{
public static void WriteLine(string s)
{
System.Console.WriteLine("AAA");
}
}
public class Program
{
//public static void WriteLine(string s)
//{
// System.Console.WriteLine("静态成员优先级更高!");
//}
static void Main(string[] args)
{
WriteLine("111"); //这里会出错,产生二义性,系统不知道要调用A中的方法还是Console中的方法
}
}
}