delphi的接口support_学习到的关于Delphi的接口
Delphi的接口,據說是很牛X的東西,總體感覺來說,沒有想象的那么好。很多Delphi相關的很牛的技術都沒有用過。
好吧,其實自己了解也并不多,更不用說很深層次的東西了,講一講自己經歷的痛苦中得出來的一些東西吧。
1. 同一個對象的一種接口的地址都是一樣的。
這個當初我也是很迷茫,在網上找了不少的資料,書上也基本沒有說。說白了就是接口的內存空間的問題,接口的內存空間是在聲明接口的時候分配的嗎,Delphi接口有自己的內存空間嗎。其實Delphi的內存空間是依附著對象,其實按道理上來講也確實是這樣的。但一般的情況是,把一個對象賦給一個接口之后,這個對象一般是不會自己去釋放的,這個對象的的生命的結束就是這個接口來管理了。
所以在改Bug的過程中,經常做的一件事情就是驗證接口的地址是否一致,如果不一致的話,肯定是有問題的。
2. 接口強轉
接口強轉有很多辦法,例如,support,as,還有直接進行類型轉換。但是很多都是有隱患的,只有通過support的返回值判斷是否支持才是足夠安全的。所以如果沒有確切的把握一般不要用其它的辦法,還是用support吧。現在我越來越覺得,很有必要這樣做,這樣不管以后的變動,影響都是最小的。
而且我還遇到一個很銷魂的問題,用support轉換之后,返回已經成功轉換了,但是接口的地址還是沒有變。這似乎是有違規律的,后來才發現,這個接口早就已經有問題了,在前面已經進行了不合法的強轉,這樣就沒有辦法了,就會產生莫名其妙的問題。
3. 一種比較麻煩的接口存儲
如果存儲大量的接口的話,用List肯定訪問起來有時候是不夠方便的,可能會想到用Hash,這就會造成一些問題,可能存儲的時候就需要轉換為數值或其它的,而不是以接口的形式存在了,然后在取出的時候轉回來。取出來的時候肯定要進行類型強轉,但已經沒有了類型的信息,所以是很不安全的。
所以必須確保,存進去和取出來的接口是一致的,取出來之后可以再進行其它的操作。
4. 轉換的原理
說句實話,我也不是很懂。在網上看到了一些相關的試驗性的代碼,在對象的存儲空間里有指針指向一個接口表,其實類型的轉換都是靠這個表來實現的,就是接口查詢,經常容易看到這個函數。
BTW: 居然在網上看到一篇韓小明的寫的從接口里獲得對象的文章,不知是不是真的這個人。 好吧,Delphi的對象確實不是一般。
總結
以上是生活随笔為你收集整理的delphi的接口support_学习到的关于Delphi的接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 过直线上一点画垂线图_苏教版四年级数学上
- 下一篇: 为什么多对多关系需要建立中间表_中间表是