«Бадди-класс» не обязательно является C#, но я считаю, что он чаще встречается в .Net как своего рода шаблон или метод (хак), используемый для расширения автоматически сгенерированных классов и добавления к ним атрибутов. Они иногда называются ассоциированными классами или классами метаданных. Соглашение об именах заключается в том, чтобы добавить MD (для метаданных) к классу друзей, чтобы его можно было идентифицировать как единое целое. Что касается того, почему, сгенерированный автоматически сгенерированный код перезапишет любые сделанные вами изменения. Связанные классы могут быть способом обойти это, и вы можете сохранить свои собственные метаданные (например, атрибуты проверки). У вас есть один класс, который автоматически генерируется, удобно обозначается как частичный (я считаю, что на самом деле почему был добавлен частичный модификатор - для расширения автоматически сгенерированных классов). Вы хотите применить атрибут, чтобы создать отдельный класс, который содержит это, и вы подружитесь с другим классом.
Если VS генерирует это для одного из ваших entitites:
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; }
}
Укороченный вариант:
Что: способ связать классы для расширения автоматически сгенерированного класса с пользовательскими метаданными
Зачем: Избегайте, чтобы ваши изменения в автоматически сгенерированный класс были перезаписаны при генерации снова.
Лично я не фанат, но это совсем другая история :)
Какая часть «предполагает, я знаю, что _is_ класс приятель» было неясно? –
Этот вопрос не объясняет, что происходит, он просто спрашивает, почему люди так делают. –
Вы не можете определить одно и то же свойство дважды в двух частичных классах ... http://stackoverflow.com/questions/6131754/how-to-add-data-annotations-to-partial-class –