什么是DiscardableAttribute用于?

时间:2011-02-18 18:10:55

标签: c# .net compiler-construction clr rotor

我找不到System.Runtime.CompilerServices.DiscardableAttribute的实际用法,即使对于原型编译器也是如此。任何见解?感谢。

1 个答案:

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