代码之家  ›  专栏  ›  技术社区  ›  Nick Bolton

如果我们对类使用C前缀,我们是否也应该对结构使用它?

  •  7
  • Nick Bolton  · 技术社区  · 15 年前

    假设一个项目已经使用了很长时间的C类前缀,并且在后期进行更改是浪费时间的,并且最初编写样式指南的人已经被一个总线击中,并且代码中已经没有结构…

    这是一个非常琐碎的问题,但是如果C++代码风格指南说“使用C来命名前缀”,那么这是否也意味着还使用C来构造前缀,或者我们应该使用不同的东西,比如S。

    class CFoo { };
    struct CBar { };
    

    …或者…

    class CFoo { };
    struct Bar { };
    
    8 回复  |  直到 7 年前
        1
  •  13
  •   unwind    15 年前

    如果样式指南没有指定,我(可能)将使用“structs are classes with all members public”-规则也将C用于结构,是的。或者我会想“哈,这是一个绕开那个愚蠢的初始规则的希望,耶”,不要使用它。换句话说,这是非常主观的。

        2
  •  27
  •   anon    15 年前

    简单答案-不要为类使用C前缀。这是匈牙利最无意义的符号。可能是时候重新编写样式指南了。坦率地说(作为一个写过很多东西的人来说),大多数这样的指南都是垃圾和/或是很久很久以前写的,而且从未更新过。

        3
  •  5
  •   Drew Dormann    15 年前

    如果代码样式指南没有指定,请查找遵循样式指南的代码,并查看已经执行的操作。

    如果没有遵循样式指南的代码,请与项目中涉及的每个人达成协议。

    如果项目中没有其他人参与,那么就做出决定并保持一致。

        4
  •  3
  •   Andreas Bonini    15 年前

    我认为这个指导方针愚蠢而令人困惑。你必须问这个问题的事实证明了这一点。

    编码样式旨在提高可读性;很明显,如果标识符是一个类或不是类,特别是当您使用一个合适的带有mouseover工具提示的IDE时。

        5
  •  2
  •   jrbjazz    15 年前

    我们通常对类使用C前缀,对没有方法的结构使用T前缀(即“C”结构)。

        6
  •  2
  •   luke    15 年前

    对我来说,这可以归结为:

    是否希望代码的读者立即区分这两种声明类型?

    虽然前缀的使用通常令人不快,但请仔细考虑代码维护者的视图。他们会不会觉得,“啊!没有C前缀,这是一个结构”。使用结构而不是类可能意味着代码中的某些特定内容。如果没有,为了维护人员的利益继续使用前缀就更有意义了。

        7
  •  2
  •   Thomas Matthews    15 年前

    如果样式指南不符合其促进易读性、一致性和正确性的目的,那么应该对其进行修改,直到修改或将其放入循环文件(垃圾桶)中。

    此外,如果人们不遵循它,那么应该更新它以便更容易遵循(或者修改工具以使对guidline的编码更容易)。

        8
  •  0
  •   Gqqnbig    7 年前

    根据现有的类前缀c的模式,您应该为struct加前缀s,为interface加前缀i。

    另外,前缀e代表枚举,d代表委托,d代表目录,f/m代表函数/方法,f代表文件,f代表字段,n代表命名空间,p代表页面,p代表参数,p代表属性,r代表返回值,v代表变量。

    从变量开始,前缀

    • 阵列天线
    • 布尔函数
    • C代表字符
    • F浮动
    • GUID
    • H代表手柄
    • 我为int
    • 杰森J
    • 钥匙钥匙
    • 用于列表
    • M表示MarshalByRefObject
    • n表示可以为空
    • 面向对象
    • 指针的P
    • 队列Q
    • 注册中心
    • 单身人士
    • 时区T
    • Uri
    • V版本
    • W代表Weakreference
    • x表示XML文档
    • YODA
    • Z文件

    例子

    好:

    namespace NGqqnbig.NConsoleApplication1
    {
        class CProgram
        {
            static void Main(string[] pasArgs)
            {
                FMain(pasArgs);
            }
    
            static void FMain(string[] pasArgs)
            {
                var vsLine= CConsole.FReadLine();
                var viSVN= CConvert.FToInt32(vsLine);
    
                var occCVC = new CCCCVC();
                occCVC.PICVC = viSVN;
            }
        }
    
        class CCCCVC
        {
            private int fiCVC;
    
            public int PICVC
            {
                get { return fiCVC; }
                set { fiCVC = pivalue; }
            }
        }
    }
    

    坏的:

    namespace Gqqnbig.ConsoleApplication1
    {
        class CProgram
        {
            static void Main(string[] args)
            {
                var line= Console.ReadLine();
                var svn= Convert.ToInt32(line);
    
                var cardVerificationCode = new CreditCardVerificationCode();
                cardVerificationCode.VerificationCode = svn;
            }
        }
    
        class CreditCardVerificationCode
        {
            public int VerificationCode { get; set; }
        }
    }