DiscardableAttribute 有何用途?

问题描述 投票:0回答:1

我找不到

System.Runtime.CompilerServices.DiscardableAttribute
的实际用途,即使对于原型编译器也是如此。有什么见解吗?

c# .net clr rotor
1个回答
6
投票

举一个比文档所述更具体的示例 - 您可以拥有一种支持内联静态方法调用的语言,这些静态方法调用使用某些特殊修饰符(来自静态类)进行标记:

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 在为程序集生成本机代码时可能会跳过它(因为该类永远不会被使用)。

© www.soinside.com 2019 - 2024. All rights reserved.