【问题标题】:Alias for static member in C#?C#中静态成员的别名?
【发布时间】:2013-07-18 03:25:00
【问题描述】:

我有一个静态成员:

namespace MyLibrary
{
    public static class MyClass
    {
        public static string MyMember;
    }
}

我想这样访问:

using MyLibrary;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            MyMember = "Some value.";
        }
    }
}

如何通过添加using MyLibrary 使MyMember 可访问(没有MyClass.)到MyApp

【问题讨论】:

    标签: c# alias static-members


    【解决方案1】:

    C# 不允许您创建成员的别名,只能创建类型的别名。因此,在 C# 中执行类似操作的唯一方法是创建一个可从该范围访问的新属性:

    class Program
    {
        static string MyMember 
        {
           get { return MyClass.MyMember; }
           set { MyClass.MyMember = value; }
        }
    
        static void Main(string[] args)
        {
            MyMember = "Some value.";
        }
    }
    

    它并不是真正的别名,但它完成了您正在寻找的语法。

    当然,如果您只是访问/修改MyClass 上的成员,而不是分配给它,这可以简化一点:

    class Program
    {
        static List<string> MyList = MyClass.MyList;
    
        static void Main(string[] args)
        {
            MyList.Add("Some value.");
        }
    }
    

    【讨论】:

    • +1 以获得有效的解决方案。这种方法的唯一问题是,我必须为每个类创建成员才能访问静态成员。
    • @dpp 正确,这就是为什么这会很痛苦。最好还是坚持传统的MyClass.MyMember = "Some value."
    • @dpp 另外,可变静态字段不仅是非常糟糕的代码气味,它们可能是并发的噩梦。我建议尽可能避免使用它们。
    • 您能否举例说明为什么应避免使用可变静态字段?也许是一个链接。谢谢!
    • 这是一个讨论它的问题:stackoverflow.com/questions/7346496/…。更多信息herehere
    猜你喜欢
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多