我试图了解在项目中放置 C# 和/或 C++ 结构的约定是什么。在它自己的源文件中?如果是,是否有任何约定我应该养成遵循的习惯?
第一年,并没有真正讨论约定,但一般来说,我们将结构“固定”在任何被使用或“感觉”最相关的地方......
在我的特定情况下,我有几个由值类型显式组成的结构,它们将在整个特定应用程序及其类中传递,所以我不能肯定地说任何一个特定的“区域”都可以声明任何类型的所有权。
我试图了解在项目中放置 C# 和/或 C++ 结构的约定是什么。在它自己的源文件中?如果是,是否有任何约定我应该养成遵循的习惯?
第一年,并没有真正讨论约定,但一般来说,我们将结构“固定”在任何被使用或“感觉”最相关的地方......
在我的特定情况下,我有几个由值类型显式组成的结构,它们将在整个特定应用程序及其类中传递,所以我不能肯定地说任何一个特定的“区域”都可以声明任何类型的所有权。
仅与单个类相关的小结构通常与该类放在同一个文件中。同样,在单个类中使用的小型简单类通常放在同一个文件中。这标识了该项目与特定类别相关,并且是将其与该类别分组的方法。
任何不简单(只有少数值)和特定于单个类的结构都应该在它自己的文件中。
在 C++ 中,如果结构由某个类或接口等“拥有”,那么我更愿意将其声明为拥有它的内部类型。如果结构是许多不同类使用的通用协议,那么我将它放在自己的 .h 文件中。如果该结构是一组相关的小型结构之一,那么我为这些东西创建一个名称空间并在提供该名称空间的单个 .h 文件中声明所有结构。
在 C# 中,我可能会做与 C++ 中相同的操作。
您应该能够为每个结构或每组相关结构创建一个单独的文件(我建议每个结构一个,但有时这会变得乏味 - 如果您将它们分组,请务必仔细命名)。
如果项目大到足以拥有您所称的“区域”,那么为适当描述它们的结构引入一个或多个命名空间可能是明智之举。这将防止命名冲突,并为您的代码使用客户端提供一种记住位置的方法。有时必须对名称进行限定似乎很痛苦,但它在大型项目中很重要,并且最终会有所帮助。
最后,大多数大型项目在高级目录或定义其消息接口的位置都有一个 Common 文件夹。这很重要,因此每个人都可以认识到 location 保存的数据结构应该被所有人使用,以保持清晰、一致的界面,以避免需要大量耗时且昂贵的转换代码(并且通常最终也会被复制! )。
如果该结构在多个类中使用,我将其放在自己的文件中。Stylecop 不会抱怨任何一种方式。并且 reshaper 有一个重构来将一个结构移动到它自己的文件中。