using static簡化靜態成員的使用

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章