什么是好友类,我如何使用它来为现有类添加注释?

时间:2016-07-14 10:15:44

标签: c# .net data-annotations buddy-class

我已经看过“好友”这个词了#34;用作答案'问题如何"我如何在另一个文件的部分类中添加注释"但这些答案假设我知道Buddy Class 是什么,代码示例假设我理解这是如何/为什么这样做。

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

1 个答案:

答案 0 :(得分:5)

'Buddy class'不一定是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; }
}

简短版本:

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

原因:避免在重新生成时覆盖对自动生成的类的更改。

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