對於使用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中的方法
}
}
}