类静态成员和其他类型之间的名称冲突

本文关键字:冲突 之间 类型 静态成员 其他 | 更新日期: 2023-09-27 17:58:04

我刚刚声明了

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轻松地修复它。静态环境下的替代方案是什么?

类静态成员和其他类型之间的名称冲突

此方法的名称与您的类相同,这是不可能的,编译器假设它是您的类的构造函数,因此它不应该具有返回类型

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

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

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