关于c#:什么是好友类?如何使用它向现有的类添加注释?

What exactly is a Buddy Class and how do I use it to add Annotations to an existing class?

我已经看到"伙伴类"一词用作诸如"如何在另一个文件的局部类中添加批注"之类的问题的"答案",但是这些答案假设我知道什么是伙伴类,并且代码示例假定 我了解其运作方式/原因。

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


"好友类"不一定是特定于C#的,但我认为它在.Net中更常见于它的一种模式或技术(hack),用于扩展自动生成的类并向其添加属性。
它们有时也称为关联类或元数据类。命名约定是将MD(用于元数据)附加到伙伴类,以便可以将其标识为一个。至于为什么,自动生成的代码会覆盖您所做的任何更改。关联的类可能是避免这种情况的一种方法,您可以保留自定义的元数据(例如,验证属性)。
您有一个自动生成的类,可以方便地将其标记为"部分"(我相信这实际上是引入了"部分"修饰符的原因-扩展了自动生成的类)。
您想应用一个属性,以便创建一个包含该属性的单独的类,然后与另一个类一起使用。

如果VS为您的一个实体生成了此文件:

1
2
3
4
public partial class AutoGeneratedClass
{
    public string SomeData { get; set; }
}

您想扩展它并添加自定义元数据,您可以创建以下代码:

1
2
3
4
5
6
7
8
9
10
[MetadataType(typeof(NotAutoGeneratedClassMD))]
public partial class AutoGeneratedClass
{
}

public class NotAutoGeneratedClassMD
{
    [DisplayName("This is some data")]
    public string SomeData { get; set; }
}

简洁版本:

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

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

我个人不是粉丝,但这是一个不同的故事:)