2010年3月22日星期一
2010年1月29日星期五
平板電腦
少了攝像功能的iPhone放大版
OS是iPhone OS
CPU是APPLE自家設計的A4 1GHz
ACER? ASUS? BENQ?
何時推出Wintel版媲美Apple輕薄極簡優美質感風格的平板電腦?
我還是習慣在Microsoft.NET平台上做軟體
2010年1月9日星期六
電子書
雖說電子書沒有平板電腦的強效多媒體功能,你會問:「有平板電腦的人會買電子書嗎?」,我的確是不會買給自己用,但我會買來送給小朋友。請別忽略了小學生的市場,記得小學時常常帶錯課本或漏帶了課本就要挨老師的藤條打,如果有電子書,所有的書都在電子書裡面,只要記得帶電子書就好。小學六年所有課本、參考書、測驗卷的費用加總起來剛好夠買一本可手寫的電子書,而義務教育的教材就不應該再收版權費。電子書需要內建學生証的功能,如果有無線通訊功能,就可以在測驗時把考卷下傳,學生直接在寫字板電子書上作答並上傳給老師。多工作業系統的應用程式可以做成獨占模式執行,當考生從監考老師的電子書下載測驗程式執行後就無法切換到其它程式做別的動作,考生在測驗期間無法看不被允許看的電子書內藏書,也無法做無線通訊,無線通訊被測驗程式獨占,考試期間使用者無法自由通訊,直到考試程式結束。
2009年11月28日星期六
2009年11月17日星期二
2009年10月25日星期日
2009年10月17日星期六
可繞曲式薄片喇叭
超薄音響喇叭突破傳統音響喇叭的沈重厚實外形限制,以紙做為主要的材質,厚度小於0.1公分,輕薄不佔空間,又可彎曲,用「印」方式的生產喇叭,可以讓電子產品更輕薄化。發聲的高頻為20KHz、低頻為200Hz,音場效果尤其適合表現細膩的中高頻音域變化,像是大自然的蟲鳴鳥叫,發聲效果一點都不輸傳統喇叭外,更具有環保節能特點,耗電量僅為傳統喇叭的10%。超薄音響喇叭未來可應用於攜帶式3C產品、交通產品及大型商業廣告,更可以跟壁紙結合在一起,當作裝潢的一部份;或任意裁切成各種形狀,發展成類似隨手或隨身貼,貼附在人的身上、衣服上或物品上之喇叭、留聲Memo卡、薄片式MP3、包裝成類似即溶飲品的隨身包,自行組合個人化超薄音響喇叭廣播禮盒,可隨身攜帶及收聽廣播。
2009年10月16日星期五
長條型動態貝殼 改良版
改良後的設計解決了滾球輪過於向內集中而在重心不穩時有翻車之慮的問題。為何堅持要拱面?因為長條型動態貝殼要能抵抗深海水壓。

在車底多配一條前進後退渦輪管,除了做流體推進,也能從此抽水入車內的水箱。在車身前後端底部各配置一條側推進渦輪管垂直橫跨在前進後退渦輪管上面,用以在流體環境中做轉向或側移。車頂上的飛碟球碟翼上下面是相反方向旋轉的薄型渦輪,其螺旋槳片可自動控制轉角度,角度皆轉至水平即組成一大圓飛行翼,也可繞著球轉角度,上下面碟翼間球的兩側有可繞著球轉向的小型水平渦輪陣列提供水平方向推進。飛碟球可分離作UAV空中偵察之用。這部動態貝殼是要能在公路上跑的,故飛碟球翼的幅圓不能像傳統直升機那樣超出機身,倘若不夠力可以在飛碟球上面多疊一個飛碟球,還是不夠力就再疊一個,但要注意公路的高度限制。
如果飛碟球不夠力就換用另外一種UAV,在中央垂直反向雙渦輪兩側加上水平方向渦輪。
2009年7月21日星期二
距離點陣感測器
繼AGPS/G-sensor/digital-compass後下一個可以整合入全觸控行動面板電腦/手機/手錶/眼罩的元件:距離點陣感測器。將攝得的影像每個像素對應到三維虛擬實境空間中(AGPS定位座標+3D電子羅盤向量x雷達距離)的位置,經過無線行動網路上大量使用者的移動,合作將實境掃描入網路分散式虛擬實境。並可添加虛擬實境物件,在隨身行動裝置看著某個實境畫面時根據AGPS定位座標與3D電子羅盤向量將虛擬實境畫面疊合到實境畫面上。
2009年6月14日星期日
哇賽! XBOX360這會兒比Wii還屌了!!
立體攝像機+紅外線測距掃瞄
完全不用任何控制器了!!
多目標追蹤玩家軀體距離點陣與影像並且辨識
身體就是控制器!!
NPC不但目光會看著你跟著你動知道你人在哪
竟然還能跟你對話?!
第五代電腦已經實現啦!
2009年5月7日星期四
照明節能建築 - 建築物光能運用
現在有很多建築物是一面擋住陽光另一面卻在耗電發光,實在很浪費。其實我們可以利用建築物原有的空調管路系統,在管路壁鋪上反射材質,延伸到樓頂導入陽光。可以在樓頂光路系統入口蓋上可即時調折射率的濾鏡,陽光中的紫外線剛好可以殺死空調管路中流通空氣中的細菌,但房間走道大廳不要有紫外線與過多的強光進入,只要在接近光出口處採用不同折射率的反射材質貼在管壁上就可以了,要避免空調冷氣反而被加熱也是採取相同的方法。至於濾鏡與反射材質的清潔問題,交給隧道清潔泡泡機器爬蟲就可以了。
In order to protect our environment, the white LED pane is the best solution to let we can see those around us clearly. In addition to that, we can switch light sensors to be power chargers in the optical circuit system for the light recycle no matter through the electronic or optical way, then it becomes an independent light cycle when night without sun outside even though some energy will lose while recycling of transforming light to something static. Take an instance of electonic case, electronic power push LED to shut light, at the same time we get light shutting the sensor/charger recieves the light shutted from the LED to produce electonic power, then the LED uses this power to shut light again, once and once.....becomes a recycle cycle. But it can't work without any other power supply supporting because there must be some energy lost each cycle it is transformed, it just can recycle some. In the same way, we can use this concept on water processing in the same circuit system. The light from sun can enheat the water flow inside the same kind of circuit system, then we have hot water to take a bath or drink even cook if sun light is focused.
In order to protect our environment, the white LED pane is the best solution to let we can see those around us clearly. In addition to that, we can switch light sensors to be power chargers in the optical circuit system for the light recycle no matter through the electronic or optical way, then it becomes an independent light cycle when night without sun outside even though some energy will lose while recycling of transforming light to something static. Take an instance of electonic case, electronic power push LED to shut light, at the same time we get light shutting the sensor/charger recieves the light shutted from the LED to produce electonic power, then the LED uses this power to shut light again, once and once.....becomes a recycle cycle. But it can't work without any other power supply supporting because there must be some energy lost each cycle it is transformed, it just can recycle some. In the same way, we can use this concept on water processing in the same circuit system. The light from sun can enheat the water flow inside the same kind of circuit system, then we have hot water to take a bath or drink even cook if sun light is focused.
Magnetic Switch
我並不清楚磁性開關元件的製程,但對designer而言,我確定magnetic IC比CMOS IC好設計。Magnetic switch是以瞬間電流脈衝改變開關狀態且不用像CMOS switch須持續供電維持開關狀態,如此開關狀態也就可以作為記憶值,所以magnetic switch本身就是非揮發性memory。想想,CMOS IC的SRAM要幾個單位的MOS才能兜成一個bit的記憶單元,DRAM雖然所占空間較小卻要時時補電reflush電容,magnetic IC的MRAM(其實就是switches)所占空間更小,半導體單元本身就是記憶體。Magnetic switch沒有MOS需要NMOS與PMOS兩種開關互補為一個完整開關CMOS的問題。MOS是非線性電阻,實作類比電路比較難設計;magnetic switch是線性電阻,實作類比電路比較容易設計。Magnetic IC也較CMOS IC容易實現以pluse為基礎漣波驅動的積體電路。
N年後現有平面顯像技術將只剩下E-Ink與OLED/PLED可取
目前E-Ink仍需持續供電維持電場吸斥帶電的色素粒子成像,只要稍做改變,在電路與色素粒子間嵌入磁鐵,改由磁鐵的磁場來吸斥帶電色素粒子,以瞬間電流脈衝改變磁鐵的磁性,E-Ink就變成只有在改變色素狀態才需要耗電的磁性顯像面板。當然最好是像素本身就是帶有色素的MRAM,會因為不同的磁性呈現不同的顏色。E-Ink唯一的缺點是無法呈現透明狀態,但由於一般顯示都須滿足在需要改變顏色時才耗電且不需要主動發光,所以不通電時呈現透明狀態且主動發光但需持續供電的OLED/PLED的應用範圍將只剩下戴上會遮住外面光源的眼罩式顯示器。不論是E-Ink還是OLED/PLED,都是軟的面板。至於硬的面板:LCD濾光片轉向通電就讓陽光照進建築物、不通電則遮光、以電壓決定讓什麼波長頻率的光能照進建築物的用途;深色的LED通電則遮光、不通電則透明,淺色的LED純粹只是高亮度照明用,但LED還是會被OLED/PLED取代,雖然LED也有軟性面板,但耗電與廢熱就輸給OLED/ PLED。假如magnetic E-Ink能夠做到可呈現透明,那用以取代窗簾的LCD/ LED就完全無用武之地了。
2009年3月14日星期六
灌水就能跑的車
燃水.......不 是燃氫氧
將水電解成氫與氧 然後輸入引擎內燃產生 動力+熱+水(蒸氣)
電解水所耗的電來自內燃引擎轉動馬達磁生的電
所以只要一些電池的電啟動 運轉起來就能自己充電
而內燃的產物是水 又可以回饋到水箱
2009年2月16日星期一
2009年2月15日星期日
晶片電池
可攜式電子產品的電池爆炸意外時有所聞,原因是液態電池密封中的電解液在溫度變化及化學反應下體積會有變化而徒增封裝內壓力。固態電池就沒有此問題,封裝成薄型晶片電池更能滿足產品薄型化的需求,更進一步則是軟式晶片電池。
2009年2月8日星期日
Head Mounted Display
看到這產品真想在前頭加上
兩個可水平轉動的image sensor與一個3D compass motion sensor
現在PDA手機也內建3D繪圖物理晶片可以跑VR
把電腦的功能塞進這產品怎麼樣?
現在PDA手機也內建3D繪圖物理晶片可以跑VR
把電腦的功能塞進這產品怎麼樣?
2009年2月4日星期三
實用 & 時尚
以上右邊的缺正面自拍鏡頭且背面鏡頭差了左邊三百萬畫素
HP TouchSmart iMac MultiTouch
第一眼看外觀造形會選擇右邊的Apple
再仔細看看實際硬體規格就會發現它略遜左邊的一籌
Apple一直是走高價時尚精品路線 但內部規格卻總是略遜一籌
以上是掌上型與桌上面板型PC 另外還有行動面板型與頭戴眼罩型PC
2008年11月21日星期五
Space Saving Table
Space Saving Table是一個長方體(兩個正方體疊起來)箱子,箱子的長側邊有滑門,箱子裡中間垂放一張冷熱控溫晶片陣列使桌箱內的空間分隔為冰箱與暖箱。冰箱與暖箱除了放飲料跟食物,餐具水洗後也收納到暖箱烘乾。桌箱的上蓋配合冰箱與暖箱做成兩個可完全掀開的正方形蓋子,蓋子的中間嵌有附熱度設定與時間開關的電熱鈑可用來烹飪。電熱鈑的電線延伸至蓋子邊緣側邊與下面形成正負兩極兩圈金屬接觸面,當蓋子閤上時就與冷熱控溫晶片陣列插板上方橫條木的電源導片接觸,且在閤上蓋子的同時也壓下了電源開關,掀開蓋子則放開電源開關斷。電冷熱控溫晶片陣列的電源線也在板子上串聯一個溫度開關然後在板子兩面邊緣形成正負兩極金屬接觸面與插板上方橫條木凹槽內兩面的兩極電源導片接觸,而這個橫條木的電源線則由橫條木的一端沿桌箱側壁導到桌箱底部穿出。Space Saving Table有效節省了沙發餐廳的空間,也讓環境看起來更簡潔。當然,搭配的沙發也可以做成中空,掀開椅墊底下也是個收納空間,沙發椅側邊也可以做滑門。
冷熱控(調)溫晶片
2008年11月20日星期四
露營車內裝再精簡版
2008年9月6日星期六
VirtualFunction
class Class1
{
public String Function() { return "Class1.Function"; }
public virtual String VirtualFunction() { return "Class1.VirtualFunction"; }
}
class Class2 : Class1 // 冒號代表"繼承自"
{
public new String Function() { return "Class2.Function"; }
// 只要sub-class與base-class有相同名稱的成員 該成員必須註明new明白表示"取代"
public override String VirtualFunction() { return "Class2.VirtualFunction"; }
// 若要繼承base-class的virtual-function就必須註明override明白表示"凌越"而非"取代"
// 若VirtualFunction被註明new而非override會造成什麼後果
// 以及override與new的差別將在後面說明
}
public partial class Form1 : Form
{
Class1 O = new Class2();
public Form1()
{
InitializeComponent();
label1.Text += "Class1 O = new Class2();" + Environment.NewLine
+ Environment.NewLine;
label1.Text += "O.Function() calls " + O.Function() + Environment.NewLine;
label1.Text += "O.VirtualFunction() calls " + O.VirtualFunction()
+ Environment.NewLine;
}
}
我寫了以上這小段簡單程式執行結果如下:

是給初學者示範virtual-function與一般function的差別的。若Class2.VirtualFunction被註明new而非override,則Class1.VirtualFunction沒有被Class2.VirtualFunction凌越,O.VirtualFunction() calls Class1.VirtualFunction。
Virtual-function的使用時機是當你要在run-time才決定要bind繼承體系中哪個class的function時就要把該function宣告成virtual。如以上範例,Class2是Class1的子類別,所以可以assign一個Class2的object給Class1 O,一個object若是一個Class2也就是一個Class1。當宣告Class1 O後,程式中每次由O.都是bind到Class1的function,除非virtual-function否則即使O = new Class2()也是bind到Class1的function,這是因為Class1 O在compile-time就決定,程式編譯O.也是在load&link-time就把function的entry-address寫死在code-segment。如果要在run-time看哪個sub-class或base-class本身的object被assign到O才bind到O所屬衍生的class的function呢?Virtual-function的做法是不直接呼叫base-class的function的address而改以呼叫放在object中virtual-function的address,也就是說在object裡增加一個欄位記載function的address,相當於宣告定義:
Class1
{
public delegate String FunctionDelegate();
// delegate是指向函數的參照型別
// 此行宣告FunctionDelegate是傳回值型別為String及參引數型別為()的函式參照型別
public FunctionDelegate VirtualFunction; // compiler說非static成員不能在此初始化
public Class1() { VirtualFunction = Function; }
// compiler說非static成員只能在函式定義中assign
public String Function() { return "Class1.VirtualFunction"; }
}
Class2 : Class1
{
public Class2() { VirtualFunction = Function; }
public new String Function() { return "Class2.VirtualFunction"; }
}
如此,哪個object被assign到O,執行O.VirtualFunction時自然就呼叫到它所屬的衍生終端類別的函式。在最前面的原始程式碼中,Function是常數,VirtualFunction是變數,都可以assign給delegate。在最前面的原始程式碼中,若Class2.VirtualFunction被註明new而非override,則在這裡相當於定義public Class2() { VirtualFunction = Class1.Function; }。
可是這樣會有什麼問題?當大量使用virtual-function時,會大量增加虛擬函數參照的欄位徒增object的size,當大量objects生成時,占用記憶體的空間更是呈倍數成長。有沒有其它辦法?如果在run-time才travel類別樹找到要bind的function呢?這個比較耗費時間的動作原先是在compile-time就做好的,在軟件製作時已經把程式寫死。如果在run-time才由object查詢其所屬class,再由class-tree的leaf開始往上找名稱符合的函式,這樣就以時間換取空間,以較多的程式執行減少記憶體空間的占用。將程式改寫如下:
class ClassA
{
public String VirtualFunction(String name)
{
try { return (String) this.GetType().GetMethod(name).Invoke(this, null); }
catch(NullReferenceException x) { return "null"; }
}
public String Function() { return "ClassA.Function"; }
}
class ClassB : ClassA
{
public new String Function() { return "ClassB.Function"; }
}
public partial class Form1 : Form
{
ClassA A = new ClassA(), B = new ClassB();
public Form1()
{
InitializeComponent();
label1.Text += "ClassA A = new ClassA(), B = new ClassB();"
+ Environment.NewLine + Environment.NewLine;
label1.Text += "A.Function() calls " + A.VirtualFunction("Function")
+ Environment.NewLine;
label1.Text += "B.Function() calls " + B.VirtualFunction("Function")
+ Environment.NewLine;
}
}
執行結果如下:

這啟示compiler可以把.Function()編譯成.VirtualFunction("Function")。
當衍生終端的class沒有定義符合名稱的function則要往base-classes去找,如果class繼承階層數太多會徒增要bind的function的提取時間,可以折衷在衍生終端的class宣告一個static-delegate記載virtual-function,執行時由object查詢其所屬class,再從class取得並呼叫這個delegate即可。由於宣告為static,欄位只存在class單元而非每一個object,所以並不耗費記憶空間。如此,程式可改寫如下:
class ClassA
{
public delegate String FunctionDelegate();
public static FunctionDelegate VirtualFunction1;
public ClassA() { VirtualFunction1 = Function; }
public String VirtualFunction(String name)
{
return ((FunctionDelegate) this.GetType()
.GetField(name).GetValue(this)).Invoke();
}
public String Function() { return "ClassA.Function"; }
}
class ClassB : ClassA
{
public static new FunctionDelegate VirtualFunction1;
public ClassB() { VirtualFunction1 = Function; }
}
class ClassC : ClassB
{
public static new FunctionDelegate VirtualFunction1;
public ClassC() { VirtualFunction1 = Function; }
}
class ClassD : ClassC
{
public static new FunctionDelegate VirtualFunction1;
public ClassD() { VirtualFunction1 = Function; }
public new String Function() { return "ClassD.Function"; }
}
class ClassE : ClassD
{
public static new FunctionDelegate VirtualFunction1;
public ClassE() { VirtualFunction1 = Function; }
}
使用時則是:
ClassA A = new ClassA();
ClassA B = new ClassB();
ClassA C = new ClassC();
ClassA D = new ClassD();
ClassA E = new ClassE();
A.VirtualFunction("VirtualFunction1");
B.VirtualFunction("VirtualFunction1");
C.VirtualFunction("VirtualFunction1");
D.VirtualFunction("VirtualFunction1");
E.VirtualFunction("VirtualFunction1");
結果:
A. calls ClassA.Function
B. calls ClassA.Function
C. calls ClassA.Function
D. calls ClassD.Function
E. calls ClassD.Function
倘若還要再減少耗費的時間,就只能從硬體著手,針對object-binding重新設計處理器,使用Sense G-machine。
{
public String Function() { return "Class1.Function"; }
public virtual String VirtualFunction() { return "Class1.VirtualFunction"; }
}
class Class2 : Class1 // 冒號代表"繼承自"
{
public new String Function() { return "Class2.Function"; }
// 只要sub-class與base-class有相同名稱的成員 該成員必須註明new明白表示"取代"
public override String VirtualFunction() { return "Class2.VirtualFunction"; }
// 若要繼承base-class的virtual-function就必須註明override明白表示"凌越"而非"取代"
// 若VirtualFunction被註明new而非override會造成什麼後果
// 以及override與new的差別將在後面說明
}
public partial class Form1 : Form
{
Class1 O = new Class2();
public Form1()
{
InitializeComponent();
label1.Text += "Class1 O = new Class2();" + Environment.NewLine
+ Environment.NewLine;
label1.Text += "O.Function() calls " + O.Function() + Environment.NewLine;
label1.Text += "O.VirtualFunction() calls " + O.VirtualFunction()
+ Environment.NewLine;
}
}
我寫了以上這小段簡單程式執行結果如下:
是給初學者示範virtual-function與一般function的差別的。若Class2.VirtualFunction被註明new而非override,則Class1.VirtualFunction沒有被Class2.VirtualFunction凌越,O.VirtualFunction() calls Class1.VirtualFunction。
Virtual-function的使用時機是當你要在run-time才決定要bind繼承體系中哪個class的function時就要把該function宣告成virtual。如以上範例,Class2是Class1的子類別,所以可以assign一個Class2的object給Class1 O,一個object若是一個Class2也就是一個Class1。當宣告Class1 O後,程式中每次由O.都是bind到Class1的function,除非virtual-function否則即使O = new Class2()也是bind到Class1的function,這是因為Class1 O在compile-time就決定,程式編譯O.也是在load&link-time就把function的entry-address寫死在code-segment。如果要在run-time看哪個sub-class或base-class本身的object被assign到O才bind到O所屬衍生的class的function呢?Virtual-function的做法是不直接呼叫base-class的function的address而改以呼叫放在object中virtual-function的address,也就是說在object裡增加一個欄位記載function的address,相當於宣告定義:
Class1
{
public delegate String FunctionDelegate();
// delegate是指向函數的參照型別
// 此行宣告FunctionDelegate是傳回值型別為String及參引數型別為()的函式參照型別
public FunctionDelegate VirtualFunction; // compiler說非static成員不能在此初始化
public Class1() { VirtualFunction = Function; }
// compiler說非static成員只能在函式定義中assign
public String Function() { return "Class1.VirtualFunction"; }
}
Class2 : Class1
{
public Class2() { VirtualFunction = Function; }
public new String Function() { return "Class2.VirtualFunction"; }
}
如此,哪個object被assign到O,執行O.VirtualFunction時自然就呼叫到它所屬的衍生終端類別的函式。在最前面的原始程式碼中,Function是常數,VirtualFunction是變數,都可以assign給delegate。在最前面的原始程式碼中,若Class2.VirtualFunction被註明new而非override,則在這裡相當於定義public Class2() { VirtualFunction = Class1.Function; }。
可是這樣會有什麼問題?當大量使用virtual-function時,會大量增加虛擬函數參照的欄位徒增object的size,當大量objects生成時,占用記憶體的空間更是呈倍數成長。有沒有其它辦法?如果在run-time才travel類別樹找到要bind的function呢?這個比較耗費時間的動作原先是在compile-time就做好的,在軟件製作時已經把程式寫死。如果在run-time才由object查詢其所屬class,再由class-tree的leaf開始往上找名稱符合的函式,這樣就以時間換取空間,以較多的程式執行減少記憶體空間的占用。將程式改寫如下:
class ClassA
{
public String VirtualFunction(String name)
{
try { return (String) this.GetType().GetMethod(name).Invoke(this, null); }
catch(NullReferenceException x) { return "null"; }
}
public String Function() { return "ClassA.Function"; }
}
class ClassB : ClassA
{
public new String Function() { return "ClassB.Function"; }
}
public partial class Form1 : Form
{
ClassA A = new ClassA(), B = new ClassB();
public Form1()
{
InitializeComponent();
label1.Text += "ClassA A = new ClassA(), B = new ClassB();"
+ Environment.NewLine + Environment.NewLine;
label1.Text += "A.Function() calls " + A.VirtualFunction("Function")
+ Environment.NewLine;
label1.Text += "B.Function() calls " + B.VirtualFunction("Function")
+ Environment.NewLine;
}
}
執行結果如下:
這啟示compiler可以把.Function()編譯成.VirtualFunction("Function")。
當衍生終端的class沒有定義符合名稱的function則要往base-classes去找,如果class繼承階層數太多會徒增要bind的function的提取時間,可以折衷在衍生終端的class宣告一個static-delegate記載virtual-function,執行時由object查詢其所屬class,再從class取得並呼叫這個delegate即可。由於宣告為static,欄位只存在class單元而非每一個object,所以並不耗費記憶空間。如此,程式可改寫如下:
class ClassA
{
public delegate String FunctionDelegate();
public static FunctionDelegate VirtualFunction1;
public ClassA() { VirtualFunction1 = Function; }
public String VirtualFunction(String name)
{
return ((FunctionDelegate) this.GetType()
.GetField(name).GetValue(this)).Invoke();
}
public String Function() { return "ClassA.Function"; }
}
class ClassB : ClassA
{
public static new FunctionDelegate VirtualFunction1;
public ClassB() { VirtualFunction1 = Function; }
}
class ClassC : ClassB
{
public static new FunctionDelegate VirtualFunction1;
public ClassC() { VirtualFunction1 = Function; }
}
class ClassD : ClassC
{
public static new FunctionDelegate VirtualFunction1;
public ClassD() { VirtualFunction1 = Function; }
public new String Function() { return "ClassD.Function"; }
}
class ClassE : ClassD
{
public static new FunctionDelegate VirtualFunction1;
public ClassE() { VirtualFunction1 = Function; }
}
使用時則是:
ClassA A = new ClassA();
ClassA B = new ClassB();
ClassA C = new ClassC();
ClassA D = new ClassD();
ClassA E = new ClassE();
A.VirtualFunction("VirtualFunction1");
B.VirtualFunction("VirtualFunction1");
C.VirtualFunction("VirtualFunction1");
D.VirtualFunction("VirtualFunction1");
E.VirtualFunction("VirtualFunction1");
結果:
A. calls ClassA.Function
B. calls ClassA.Function
C. calls ClassA.Function
D. calls ClassD.Function
E. calls ClassD.Function
倘若還要再減少耗費的時間,就只能從硬體著手,針對object-binding重新設計處理器,使用Sense G-machine。
订阅:
博文 (Atom)
