类静态成员和其他类型之间的名称冲突
本文关键字:冲突 之间 类型 静态成员 其他 | 更新日期: 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
。