我想知道是否可以创建一个自定义的过时类。我需要它,我讨厌 Obsolete 在我输入之前显示此警告的事实:SOMETHING is Obsolete:。当我仅使用我的输入使用字段/方法时,我只想发出警告/错误,例如:
[CustomObsolete("Hello")]
public int i = 0;
会给出警告/调试你好。
这可能吗?如果我使用#warning/#error,它总是会显示错误/警告。
我想知道是否可以创建一个自定义的过时类。我需要它,我讨厌 Obsolete 在我输入之前显示此警告的事实:SOMETHING is Obsolete:。当我仅使用我的输入使用字段/方法时,我只想发出警告/错误,例如:
[CustomObsolete("Hello")]
public int i = 0;
会给出警告/调试你好。
这可能吗?如果我使用#warning/#error,它总是会显示错误/警告。
不,ObsoleteAttribute
实际上是硬编码到 C# 编译器中 - 无法创建您自己的属性,C# 编译器将理解为指示成员已过时。
就我个人而言,我会选择-错误消息以“X 已过时”开头ObsoleteAttribute
真的那么糟糕吗?
实现您想要的一种方法是自定义post-build task
. 编译项目后,让您创建的另一个程序加载此程序集并解析它以获取您的属性。然后你可以输出你想要的消息等等。但是输出使用此属性的确切行号和文件将是一项棘手的任务,因为为此您必须解析 pdb 文件(并且只能在调试模式下正常工作)。
您最好只坚持Obsolete
.NET 的属性。:-)
你只能使用过时的
有错误
[Obsolete("Hello", true)]
public String foo() {
return "bar";
}
并警告
[Obsolete("Hello", false)]
public String foo() {
return "bar";
}