繁体   English   中英

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

[英]How to add attributes to a base class's properties

我有几个 model 类,如下所示:

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

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

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

将父 class 中的属性声明为虚拟:

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

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

例如

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


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

ASP.NET MVC(包括核心)通过ModelMetadataTypeAttribute FromQuery

我注意到这些答案都没有真正正确地调用基本名称属性。 覆盖应该像下面这样写,以便您没有新属性的单独值。

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

您可以通过“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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM