【问题标题】:Constructor in partial MetataData class部分 MetaData 类中的构造函数
【发布时间】:2014-08-20 07:35:55
【问题描述】:

我有以下部分类,它为我的数据库优先模型提供元数据。

namespace Model.Metadata.Routing
{
    [MetadataType(typeof(RoutingMetadata))]
    public partial class Routing
    {

    }

    public partial class RoutingMetadata
    {          
        [DefaultValue("%")]
        public string Slot { get; set; }

        [Required(ErrorMessage = "This field is requied")]
        [DefaultValue(0)]
        public int BlockStart { get; set; }
        [Required(ErrorMessage = "This field is requied")]
        [DefaultValue(499)]
        public int BlockEnd { get; set; }
        [DefaultValue(-1)]       
    }
}

现在我想为路由类添加一个构造函数来默认我的值,

public Routing()
{
  Slot="%";
}

在哪里添加构造函数?

[编辑] 部分类路由的另一半

 public partial class Routing
{      
    public string Slot { get; set; }
    public int BlockStart { get; set; }
    public int BlockEnd { get; set; }
}

【问题讨论】:

  • 嗯,Slot 不是Routing 的属性...它是RoutingMetadata 的属性。所以你的构造函数体没有意义......
  • 但它是Database first Model生成的另一个Partial Class中Routing的成员。见编辑
  • 好的。从一开始就知道这会很有用:) 尽管在您的编辑中出于某种原因它被称为RadioRouting。但基本上,将构造函数放在任一类声明中的任何位置......

标签: c# asp.net asp.net-mvc partial-classes


【解决方案1】:

您可以将构造函数放在任何一个分部类定义中,这取决于您认为最合乎逻辑的地方。

当然,分部类定义的所有部分都需要具有相同的类名和命名空间,或者它们是不同的类。 RoutingRadioRouting 不是同一个类,因为它们的名称不同。

【讨论】:

  • 如果我在部分类路由中创建构造函数(在我的问题的顶部)它不知道值 Slot。我是否必须将其他部分类中的所有值复制到这个类中?
  • 不,您的构造函数应该查看分部类其他部分的属性。如果不是,则部分类定义有问题,例如类名或命名空间不匹配。部分类的行为与任何其他类一样,只是您可以将它们拆分到多个文件中。
  • 顺便说一句,忠告:不要过度滥用部分类,因为它会使您的代码库难以维护。我只会在类的一部分由工具生成时使用它们。
  • 另外,如果你将属性从部分的一部分复制到另一部分,你应该会因为重复的属性而出现编译错误(除非它们实际上是, 属于同一类)。
  • 好吧,对于生成的代码没关系,但当然你应该将构造函数或任何其他自定义代码放在生成的部分中,因为它可能会被工具覆盖.您是否检查过该类的两个部分是否在同一个命名空间中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多