關於C using 作為定義範圍的問題

2021-04-02 21:16:16 字數 839 閱讀 7255

昨天我們團隊的一位同學問到我關於using關鍵字作為定義範圍使用自動釋放物件是如何工作的問題.

其實using關鍵字作為範圍定義使用,自動完成釋放工作完全是一種語法層面的簡化.

首先我們按照標準using作為範圍使用的方法編寫乙個程式;

public class a : idisposable

///

/// 函式方法

///

///

public int getvalue()

///

/// 銷毀函式

///

public void dispose()

}

class demo

}

}其實這裡關於使用using作為物件範圍要求函式實現具有idisposable介面dispose函式.

為什麼需要這樣呢?可以肯定在這個過程中必定自動呼叫了dispose函式,居然如何實現的呢?

我們使用ilda**反彙編il看一下上面這個程式的中間**:

.try

// end .try

finally

// end handler

很奇怪,為什麼出現了try和finally結構呢?

按照這個思路,我重新寫了一段**實現上面的功能.

static void main(string args)

finally

}再去用ilda**工具做反彙編,居然和使用using控制範圍結果獲得同樣的il.

其實這樣也就可以結實為什麼必須實現dispose介面的原因了,因為using範圍物件其實本質是對try..finally自動釋放的一種語法簡化.

Spring作用域範圍的bean作為依賴

spring ioc容器不僅管理物件 bean 的例項化,而且管理依賴的織入。如果你想注入例如乙個http作用域範圍的bean到另外乙個生命週期更長的bean當中,你或許可以選擇注入乙個aop 去替換掉這個作用域範圍的bean。也就是說,您需要注入乙個 物件來公開相同的公共介面作為這個作用域的bea...

關於SAP的編碼範圍

1.numberrange的通用tcode snro 2.number range的通用讀取函式 number get next 3.如有跳號現象,可以禁用物件的buffer試試 4.幾個關於number range的函式組 snr0 online maint.of number ranges gr...

關於finally的生效範圍

一直以為finally是在乙個try catch塊中,不管裡面有沒拋異常,最終都會去執行的乙個塊,比如 public void testfinallymethod catch exception e finally 然而今天同事有個需求,就是在try塊中return break continue 那...