C#中静态成员的别名是什么?

4

我有一个静态成员:

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 访问?
1个回答

6

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.");
    }
}

这种方法的唯一问题是,我必须为每个类创建成员才能访问静态成员。 - kazinix
1
@dpp 正确,这就是为什么这将会很痛苦。最好还是坚持传统的 MyClass.MyMember = "一些值" - p.s.w.g
@dpp 另外,可变静态字段不仅是糟糕的代码味道,还可能导致并发问题。我建议尽可能避免使用它们。 - p.s.w.g
你能提供一个为什么应该避免可变静态字段的例子吗?可以附上链接。谢谢! - kazinix
这里有一个讨论此问题的问题:https://dev59.com/w2s05IYBdhLWcg3wQvuq。更多信息请参见此处(http://blogs.tedneward.com/2008/02/22/Static+Considered+Harmful.aspx)和此处(http://c2.com/cgi/wiki?GlobalVariablesAreBad)。 - p.s.w.g

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接