Interface的DisplayName属性

时间:2015-10-30 12:05:15

标签: interface attributes

是否有其他方法可以更改界面的显示名称? 编译器告诉DisplayName属性仅对类

有效
t_train.transpose()
t_test.transpose()

2 个答案:

答案 0 :(得分:1)

问题在于DisplayNameAttribute的{​​{1}}中有AttributeTargets,因此无法将其应用于接口。
可能没有特定的设计原因,只是从未使用过,因此从未考虑过。

最简单的解决方案是扩展属性并应用您自己的Class | Method | Property | Event

AttributeTargets

此方法的好处是您可以像“ [AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event)] public class MyDisplayNameAttribute : System.ComponentModel.DisplayNameAttribute { public MyDisplayNameAttribute(string name) : base (name) { } } [MyDisplayName("NewName")] interface IMyInterface { } ”一样检索它:

DisplayNameAttribute

答案 1 :(得分:0)

没有属性不能应用于接口。这是有效属性目标的列表

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/#attribute-targets

您可以创建一个抽象类,其中所有成员都是抽象的。在某种程度上,这将与具有属性的接口相同。但是,使用抽象类代替接口还会影响到应用程序的体系结构。