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中的方法
        }
    }
}

 

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