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; } } |
简洁版本:
内容:将类与自定义元数据关联以扩展自动生成的类的方法
原因:避免再次生成时对自动生成的类所做的更改被覆盖。
我个人不是粉丝,但这是一个不同的故事:)