有没有办法覆盖部分 类 中属性的应用顺序?
Is there a way to override order of application of attributes in partial classes?
我有 2 个文件包含部分 classes。一个生成的和一个手动的。我想覆盖、级联或以其他方式指定属性在编译时应用的顺序,以便更改 class 成员属性之一。
生成的代码:
[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("RichText") 覆盖 UIHint("MultilineText")。这在一台开发机器上运行良好,而不是在另一台开发机器上运行良好,这让我相信 1) 也许我不应该两次指定特定属性,或者 2) 也许有一种方法可以强制命令覆盖属性正确。
没有。关键字 partial
表示 class(结构等)定义被拆分为两个或多个源文件,仅此而已。如果将每个部分复制到单个文件中并删除 partial
关键字,它将是相同的。
从技术上讲,您可以使用 [AttributeUsage(Inherited=false)]
Are Method Attributes Inherited in C#?
更改 derived class 中的属性
这是不可能的,源代码中属性的顺序对编译器没有任何意义。
17.2 Attribute specification - MSDN
The order in which attributes are specified in such a list, and the
order in which sections attached to the same program entity are
arranged, is not significant
当你有部分 类 并且在不同的源文件中使用不同的属性时,编译器只会合并它们。
正如我所说,您不能让一个属性声明覆盖另一个声明,但是当您控制在 运行 时间使用该属性的代码时,您可以做的是获取应用的所有属性,应用您想要的任何顺序,并且只使用其中一个。但我不认为这是你的情况。
我有 2 个文件包含部分 classes。一个生成的和一个手动的。我想覆盖、级联或以其他方式指定属性在编译时应用的顺序,以便更改 class 成员属性之一。
生成的代码:
[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("RichText") 覆盖 UIHint("MultilineText")。这在一台开发机器上运行良好,而不是在另一台开发机器上运行良好,这让我相信 1) 也许我不应该两次指定特定属性,或者 2) 也许有一种方法可以强制命令覆盖属性正确。
没有。关键字 partial
表示 class(结构等)定义被拆分为两个或多个源文件,仅此而已。如果将每个部分复制到单个文件中并删除 partial
关键字,它将是相同的。
从技术上讲,您可以使用 [AttributeUsage(Inherited=false)]
Are Method Attributes Inherited in C#?
这是不可能的,源代码中属性的顺序对编译器没有任何意义。
17.2 Attribute specification - MSDN
The order in which attributes are specified in such a list, and the order in which sections attached to the same program entity are arranged, is not significant
当你有部分 类 并且在不同的源文件中使用不同的属性时,编译器只会合并它们。
正如我所说,您不能让一个属性声明覆盖另一个声明,但是当您控制在 运行 时间使用该属性的代码时,您可以做的是获取应用的所有属性,应用您想要的任何顺序,并且只使用其中一个。但我不认为这是你的情况。