我找不到
System.Runtime.CompilerServices.DiscardableAttribute
的实际用途,即使对于原型编译器也是如此。有什么见解吗?
举一个比文档所述更具体的示例 - 您可以拥有一种支持内联静态方法调用的语言,这些静态方法调用使用某些特殊修饰符(来自静态类)进行标记:
static class Bar {
static inline void Foo(int a) { // Note fictional 'inline' modifier
return a + 10;
}
}
如果您有一个这样的类,那么您的任何其他代码片段都不会真正引用它。当你写下:
int y = Bar.Foo(x);
编译器将其编译为:
int y = x + 10;
您需要在编译的代码中保留
Bar
的定义,因为如果您从其他项目引用该程序集,您希望看到它(当您调用 Foo
方法时,编译器将只采用已编译的IL 来自该集会)。
但是,类
Bar
永远不会在运行时使用(它只是为了保留代码,而不是实际执行它)。我想您可以将其标记为 Discardable
,并且 JIT 在为程序集生成本机代码时可能会跳过它(因为该类永远不会被使用)。