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

Mr.*_*Boy 1 .net c# buddy-class data-annotations

我已经看到术语"好友类"用作"如何在另一个文件中为部分类添加注释"之类的问题的"答案",但这些答案假设我知道Buddy类什么,并且代码示例假设我理解这是如何工作的原因.

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

Iri*_*son 5

'Buddy class'不一定是C#特定的,但我相信在.Net中更常见的是它的一种模式或技术(hack),用于扩展自动生成的类并为它们添加属性.它们有时也被称为关联类,或元数据类.命名约定是将MD(对于元数据)附加到伙伴类,以便将其标识为一个.至于为什么,自动生成的代码会覆盖您所做的任何更改.关联类可以是绕过它的一种方法,您可以保留自定义元数据(例如验证属性).你有一个自动生成的类,轻松标记为部分(我相信这实际上是为什么引入了部分修饰符 - 扩展自动生成的类).您想要应用一个属性,以便创建一个包含该属性的单独类,并将其与另一个类进行混淆.

如果VS为您的某个权限生成此内容:

public partial class AutoGeneratedClass
{
    public string SomeData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且您想要扩展它并添加您可以创建的自定义元数据:

[MetadataType(typeof(NotAutoGeneratedClassMD))]
public partial class AutoGeneratedClass
{
}

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

精简版:

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

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

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