由于标准c#约定是大写公共属性的第一个字母,因此类型名称的初始大写的旧c ++约定和非类型名称的初始小写不会阻止经典名称冲突中最明显的对象名称匹配类型名称:
class FooManager
{
public BarManager BarManager { get; set; } // Feels very wrong.
// Recommended naming convention?
public int DoIt()
{
// 1st and 2nd Bar Manager are different symbols
return BarManager.Blarb + BarManager.StaticBlarb;
}
}
class BarManager
{
public int Blarb { get; set; }
public static int StaticBlarb { get; set; }
}
似乎编译,但感觉很错误。是否有推荐的命名约定来避免这种情况?
答案 0 :(得分:7)
具有完全相同名称的类型和属性并不罕见。是的,它看起来有点奇怪,但无可否认地重命名属性以避免这种冲突甚至更奇怪。
Eric Lippert a blog post on this exact topic。
然而,编译器没有歧义。
答案 1 :(得分:1)
c#约定是以与命名类相同的方式命名属性。你觉得它错的原因是因为你来自不同的背景。但是,如果你使用if一段时间,你会发现它不会给你带来任何问题,当你习惯它时它会感觉很自然。没有任何地方会以任何方式发生碰撞。我(作为一个c#开发人员)觉得属性的初始小写字母的惯例感觉不对。你只需要习惯它。
答案 2 :(得分:1)
老实说,我没关系 - 如果你的静态方法/成员在名称和目的方面显然不是静态的,那么你就会遇到比命名冲突更大的问题。
答案 3 :(得分:1)
我认为它从来没有给我造成任何问题。以下是属性的一般约定。只有helpful
可能是getting used
这些......
为什么:这个约定是一致的 使用.NET Framework很容易 读。像
public int RecordId
答案 4 :(得分:0)
我会说,我不介意碰撞,因为编译器可以解决它。 然而,本着提供其他解决方案的精神,我已经看到了,让其他人自己决定......我认为这是使用My *的丑陋(对我而言)的模式。
例如:
public class Foo { /* ... */ }
public class Bar
{
public Foo MyFoo { get; set; }
// ...
}