Подтвердить что ты не робот

Как добавить атрибуты к свойствам базового класса

У меня есть пара модельных классов:

public class MyModelBase
{
    public string Name { get; set; }
}

public class MyModel : MyModelBase
{
    public string SomeOtherProperty { get; set; }
}

Как MyModel может добавить атрибут [Обязательный] к свойству Name?

4b9b3361

Ответ 1

Попробуйте использовать класс метаданных. Это отдельный класс, на который ссылаются атрибуты, которые позволяют добавлять аннотации данных к классам модели косвенно.

например.

[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase {
  ... /* the current model code */
}


internal class MyModelMetadata {
    [Required]
    public string Name { get; set; }
}

Ответ 2

Объявить свойство в родительском классе как виртуальное:

public class MyModelBase
{
    public virtual string Name { get; set; }
}

public class MyModel : MyModelBase
{
    [Required]
    public override string Name { get; set; }

    public string SomeOtherProperty { get; set; }
}

Или вы можете использовать MetadataType для обработки проверки (пока вы говорите о DataAnnotations... иначе вы застряли с приведенным выше примером):

class MyModelMetadata
{
    [Required]
    public string Name { get; set; }

    public string SomeOtherProperty { get; set; }
}

[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase
{
    public string SomeOtherProperty { get; set; }
}

Ответ 3

Я отмечаю, что ни один из этих ответов на самом деле не называет базовое свойство Name правильно. Для переопределения следует написать что-то вроде следующего, чтобы у вас не было отдельного значения для нового свойства.

public class MyModelBase
{
    public virtual string Name { get; set; }
}

public class MyModel : MyModelBase
{
    [Required]
    public override string Name { get { return base.Name; } set { base.Name = value; }

    public string SomeOtherProperty { get; set; }
}

Ответ 4

Вы можете перегрузить базовое свойство с помощью "нового" ключевого слова.

public class MyModelBase
{
     public string Name { get; set; }
}

public class MyModel : MyModelBase
{
     [Required]
     public new string Name {get; set;}
     public string SomeOtherProperty { get; set; }
}