2011-02-18 39 views
1

即使是原型編譯器,我也找不到System.Runtime.CompilerServices.DiscardableAttribute的實際用法。任何見解?謝謝。什麼是DiscardableAttribute用於?

+2

[documentation](http://msdn.microsoft.com/zh-cn/library/system.runtime.compilerservices.discardableattribute.aspx)解釋了備註部分中可能的用法。 – 2011-02-18 18:13:22

回答

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可能會跳過它(因爲這個類永遠不會被使用)。

+0

非常感謝,說實話我跳躍的抖動可以「內聯」下面的助手類:[Discardable] class AtomicRead:IDisposable { 私有隻讀ReaderWriterLock _lock; internal AtomicRead(ReaderWriterLock @lock) { _lock = @lock; _lock.AcquireReaderLock(Timeout.Infinite); () } void IDisposable.Dispose() { _lock.ReleaseReaderLock(); } } - OMG>我該怎麼做這個編輯器?! :S – aracntido 2011-02-19 01:11:35