1

我已经看到术语“好友类”被用作“如何向另一个文件中的部分类添加注释”等问题的“答案”,但这些答案假设我知道好友类什么,并且代码示例假设我理解这是如何/为什么起作用的。

我无法简单解释 C# 中的伙伴类是什么,以及它如何/为什么允许我修改现有类,例如向属性添加注释。

4

1 回答 1

5

“伙伴类”不一定是 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; }
}

精简版:

内容:关联类以扩展自动生成的类与自定义元数据的方法

原因:避免在再次生成时覆盖对自动生成的类所做的更改。

就我个人而言,我不是粉丝,但那是另一回事:)

于 2016-07-14T11:51:01.543 回答