1

我有2个文件包含部分类。生成和手动之一。我想覆盖,级联或以其他方式指定在编译时应用属性的顺序,以便更改其中一个类成员属性。有没有办法来覆盖部分类中属性的应用顺序?

生成的代码:

[Table("dbo.product_variation")] 
public partial class ProductVariation 
{ 
    [Key] 
    [Column("id")] 
    public int Id { get; set; } 

    [Required] 
    [Column("style_id")] 
    public int StyleId { get; set; } 

    [Required] 
    [Column("name"), StringLength(400)] 
    public string Name { get; set; } 

    [Column("general_description"), StringLength(2048), UIHint("MultilineText")] 
    public string GeneralDescription { get; set; } 
} 

手册代码:

[MetadataType(typeof(ProductsMetadata))] 
public partial class ProductVariation 
{ 
} 

public partial class ProductsMetadata 
{ 
    [UIHint("RichText")] 
    public string GeneralDescription { get; set; } 
} 

这里的真正意图是UIHint( “富文本”)覆盖UIHint( “MultilineText”)。这是工作正常的一个开发机器,而不是在另一个开发机器,这导致我相信1)也许我不应该指定一个特定的属性两次,或2)也许有一种方法来强制命令覆盖属性正常。

回答

3

这是不可能改变派生类的属性,在属性源的排序没有任何意义的编译器。

17.2 Attribute specification - MSDN

在哪些属性在这样的列表中指定的顺序,并在其中连接到相同节目实体区段布置是 的 顺序,是不是显著

当你有部分类,不同的属性用于不同的源文件,编译器只是合并它们。

正如我所说的,你不能让一个属性声明覆盖另一个声明,但是当你在运行时使用该属性的代码的控制权时,你可以做的是获取应用的所有属性,只想使用其中之一。但我不认为这是你的情况。

+0

我可以控制生成的代码以及手动代码,所以我可以做出一些让步。这很清楚地回答了我的问题。谢谢! – secretwep

0

编号关键字partial表示类(结构等)定义被分割为两个或多个源文件,仅此而已。如果您将每个部分复制到单个文件并删除partial关键字,它将是相同的。 技术上讲,你可以通过使用[AttributeUsage(Inherited=false)]Are Method Attributes Inherited in C#?

相关问题