<**>
請問new和using的區別?
很多公司的面試都可能問或是考查這個看似基礎的東西,恕我渾渾噩噩,我可能回答的不夠好!習慣性質的是由於我可能知道一些東西,但由於事務纏身,並沒有去過多的關注部分細節,其間也沒有得到某些無意或是有意的灌輸,我可能會回答區別在於乙個不會自動釋放資源,乙個會。那using為甚麼會了?在甚麼時候使用using合適?等
我不知道在後面的回答是否都能把握的好,這只能說明我不夠精通,但這些題目從來就沒有給別人這樣乙個機會,假如你回答的不好,你是否能通過一種途徑來找出區別,然後你再重新回答。
我笑了,假如我回答的不夠好,我覺得後面是乙個機會(也是一種能力的考察),我會通過甚麼途徑了,ildasm,至少我知道我們生活再.net的「蜜糖」中,我們有了好的高層次的框架,我有了很好的開發效率,但我忽視了細節,有很多時候,甚至懶得去關心細節,但這個題目讓我覺得很丟臉,我回答的不好(陰溝裡還翻了船) ,但我自知,秘密就藏再後面,於是我解開一段demo,看個明白。
using
system;
namespace
demo}}
class
test:system.idisposable
}#region
idisposable members
public
void
dispose()
#endregion}}
上面**對應的il語言解開了using的秘密 (本人不才,到也研究過)
.method private hidebysig static void main(string args) cil managed
// end .try
finally是一定會執行
finally
// end handler
il_0018: ret
} // end of method class1::main
現在我要回答後面的問題了,是框架幫我做了手腳,他強制幫我呼叫物件的dispose資源釋放方法,而且,如果你的物件沒有實現此idisposable介面,卻用了using,編譯是不會通過的喲!這裡看來,using的時機是當物件使用了非託管資源或是比較寶貴的資源,
而對於託管的或非寶貴的資源,我可以依賴gc,沒有必要自己畫蛇添足。而且try塊是會影響效率的。
請問foreach的機制是甚麼?
哎!我就是用著爽嘛! 而且我幾乎就把它當乙個語法來看,誰又會沒有刻意的卻去看它的細節了,如果有的東東不清楚,我可以翻msdn,我去google搜,我自己看ildasm,^_^,面試的人也不要因人家回答的不好就痞的人家一錢不值的樣子(有這樣的人,自命不凡而已)你非框架
的締造者,微軟的秘密多的去了,乙個人是否能面面具到了,你是否就真的考察了能力,或只是換了皮囊的應試。希望這裡也仍給人乙個機會
找出這個機制,想想,我們訪問乙個arraylist時,我用過,於是第二個demo出來
using
system;
using
system.collections;
namespace
demo}}
} .method private hidebysig static void main(string args) cil managed
// end .try
finally
// end handler
il_0031: ret
} // end of method class1::main
我們看到一些非我們定義的東西,甚麼列舉器呀,getenumerator()來獲得列舉器等等,於是會讓我想看看arraylist的
實現,它究竟是耍了什麼花招可以有這些了,你看看類庫的反編譯**,你就發現,這些集合類實現了乙個介面,那就是
system.collections.ienumerable (可列舉) ,這個介面也沒搞甚麼,就是要你實現乙個system.collections.ienumerator介面的 物件,經msdn翻查
我看到這個ienumerator介面就定義甚麼movenet, get_current之類的,介面協定了行為的約束集合,是為了讓框架能夠服務於此,框架控制
了流程,它呼叫了我們的**,對於我們來說,框架如何使用我們的**是透明的,真的覺得框架類似乙個功能強大的中介軟體哈!。
於是乎,我們明白了,我們知道了foreach的機制 是你實現ienumerable,ienumetrtor介面,能夠讓我們的一些物件能夠遍歷自己的部分的一種
能力,而foreach僅是個偽裝的**,它甚至就是乙個高階的巨集!就是乙個巨集的機制,但需要我們對某些物件實現一些特定的介面,否則這個
巨集如何起作用了^_^。
呵呵,清楚了吧,在我看到il之前,或是我沒有去關注過,我還真說不清楚foreach的機制(我只能搪塞),ide是如何瞞天過海的做了那麼多事情。
說到最後,好比封箱拆箱,c#**表面都是糊弄著我們,沒人教你,你不看il你能知道嗎,我們決不要學人云亦云的人(知其所以然)
面試的過程不是簡單的質檢,你要給別人機會,那就是如果你不清楚,你會如何,或打算怎麼去弄清楚,解決的途徑,而
非乙個絕對的答案。你應該學會接受這樣的答案 (我對foreach不清楚,但是我會怎麼樣就可以怎麼樣去了解它。。。)
看別人對問題的態度和處理方式,在紙上寫乙個演算法思路還可以,寫個執行的程式,最是無趣了!
注:本人水平有限,文中如有錯誤或不當之處 ,難免^_^
C 中using和new的用法
using 根據微軟msdn上的解釋,c 中的using共有三種用途 引用命名空間 為命名空間或型別建立別名 使用using語句。1 引用命名空間 用using來引用命名空間,可以直接在程式中使用命名空間下的型別而不必指定詳細的命名空間,如 using system.servicemodel等等。2...
typedef 和 using 的區別
定義別名,用於簡化複雜的變數型別巢狀,增加 可讀性,便於優化維護。typedef std vector v s mp int2 ii 引入命名空間 using namespace std 定義別名,類似於typedef using v s mp int2 ii std vector 相對於typed...
new和malloc的區別
1 new 是c 中的操作符,malloc是c 中的乙個函式 2 new 不止是分配記憶體,而且會呼叫類的建構函式,同理delete會呼叫類的析構函式,而malloc則只分配記憶體,不會進行初始化類成員的工作,同樣free也不會呼叫析構函式 3 記憶體洩漏對於malloc或者new都可以檢查出來的,...