我已经看到术语“好友类”被用作“如何向另一个文件中的部分类添加注释”等问题的“答案”,但这些答案假设我知道好友类是什么,并且代码示例假设我理解这是如何/为什么起作用的。
我无法简单解释 C# 中的伙伴类是什么,以及它如何/为什么允许我修改现有类,例如向属性添加注释。
我已经看到术语“好友类”被用作“如何向另一个文件中的部分类添加注释”等问题的“答案”,但这些答案假设我知道好友类是什么,并且代码示例假设我理解这是如何/为什么起作用的。
我无法简单解释 C# 中的伙伴类是什么,以及它如何/为什么允许我修改现有类,例如向属性添加注释。
“伙伴类”不一定是 C# 特定的,但我相信它在 .Net 中更常见,因为它是一种模式或技术(hack),用于扩展自动生成的类并向它们添加属性。它们有时也称为关联类或元数据类。命名约定是将 MD(用于元数据)附加到伙伴类,以便可以将其标识为一个。至于为什么,自动生成的代码会覆盖您所做的任何更改。关联类可能是一种规避方法,您可以保留自定义元数据(例如验证属性)。您有一个自动生成的类,可以方便地标记为部分(我相信这实际上是引入部分修饰符的原因 - 以扩展自动生成的类)。您想应用一个属性,因此您创建一个包含该属性的单独类,
如果 VS 为您的一个实体生成此文件:
public partial class AutoGeneratedClass
{
public string SomeData { get; set; }
}
你想扩展它并添加你可以创建的自定义元数据:
[MetadataType(typeof(NotAutoGeneratedClassMD))]
public partial class AutoGeneratedClass
{
}
public class NotAutoGeneratedClassMD
{
[DisplayName("This is some data")]
public string SomeData { get; set; }
}
精简版:
内容:关联类以扩展自动生成的类与自定义元数据的方法
原因:避免在再次生成时覆盖对自动生成的类所做的更改。
就我个人而言,我不是粉丝,但那是另一回事:)