Для чего используется DiscardableAttribute?
Я не могу найти практическое применение System.Runtime.CompilerServices.DiscardableAttribute
даже для прототипа компилятора. Любое понимание? Благодарю.
1 ответ
Чтобы привести более конкретный пример, чем то, что написано в документации, у вас может быть язык, который поддерживает встраивание вызовов статических методов, которые помечаются с помощью какого-то специального модификатора (из статического класса):
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 может пропустить его при создании собственного кода для вашей сборки (потому что класс никогда не будет использоваться).