如何将属性添加到基类的属性

时间:2011-07-01 16:06:14

标签: c#

我有几个这样的模型类:

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

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

MyModel如何将[Required]属性添加到Name属性?

4 个答案:

答案 0 :(得分:38)

将父类中的属性声明为virtual:

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; }
}

答案 1 :(得分:34)

尝试使用元数据类。它是一个单独的类,使用允许您间接向模型类添加数据注释的属性进行引用。

e.g。

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


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

答案 2 :(得分:14)

我注意到这些答案实际上都没有正确地调用基本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; }
}

答案 3 :(得分:0)

您可以通过“new”关键字重载基本属性。

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

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