类静态成员与另一个类型之间的名称冲突

时间:2014-04-13 18:35:03

标签: c# .net

我刚宣布

public static class DefaultComparers
{
    public readonly IComparer TextComparer = new TextComparer(new CompositeIndexedComparer<string>());

    private static IDictionary<string, IComparer> DefaultComparers()
    {
       return new Dictionary<string, IComparer>(StringComparer.InvariantCultureIgnoreCase) {
                {"txt", TextComparer}
       };
    }
}

然而,在同一名称空间中已经是一个名为TextComparer的类,因此DefaultComparers方法不会编译。如果它是一种非静态方法,我可以使用this.TextComparer轻松修复它。静态上下文中的替代方法是什么?

2 个答案:

答案 0 :(得分:6)

此方法的名称与您的类相同,但不能,编译器将其视为您的类的构造函数,因此它不应该具有返回类型

private static IDictionary<string, IComparer> DefaultComparers()
{
   return new Dictionary<string, IComparer>(StringComparer.InvariantCultureIgnoreCase) {
            {"txt", TextComparer}
   };
}

答案 1 :(得分:1)

你的问题似乎是基于错误的前提。您的代码还有其他几个问题,但您要求的问题是不存在的。这完美编译:

class ConflictName
{
}
class GoodName
{
    static object ConflictName = new ConflictName();

    static Dictionary<string, object> ANOTHERGoodName()
    {
        return new Dictionary<string, object>
        {
            { "txt", ConflictName }
        };
    }
}

编译器知道 类型 class ConflictName)和 之间的区别(第二类内的字段ConflictName)。

但是,在其他情况下,需要限定static成员(例如,因为它被同一方法中定义的局部变量隐藏),您只需在类名,例如GoodName.ConflictName而非ConflictName