Silverlight Interop 2-Javascript呼叫Silverlight方法的Overloading

先前文章文末提過一篇Silverlight interoperability,裡面有一句話

We have basic support for method overloading, by finding the overload which matches the number of arguments and by doing some basic parameter validation.

引起我的興趣,做了點研究,大致心得如下:

  1. 透過參數數目不同,Javascript呼叫時可精準地判別切換Overloading。(給個"讚"!)
  2. 如果參數數目相同,Siverlight Plugin還是能很粗略地依Javascript參數型別做判斷,但由於Javascript世界型別並不明確,判別精準度有限,如下面這個機車的例子:
        public class JavascriptSidekick
        {
            [ScriptableMember]
            public string Test(double d)
            {
                return "Double";
            }
            [ScriptableMember]
            public string Test(bool b)
            {
                return "Bool";
            }
            [ScriptableMember]
            public string Test(string s)
            {
                return "String";
            }
            [ScriptableMember]
            public string Test(ScriptObject o)
            {
                return "ScriptObject";
            }
        }

    用以下Javascript測試:
    alert(jssk.Test(1));
    alert(jssk.Test(true));
    alert(jssk.Test(3.14));
    alert(jssk.Test("Darkthread"));
    alert(jssk.Test(document.getElementById("form1")));

    結果挺有趣的,1, true, 3.14都會得到Double,"Darkthread"得到String,getElementById("form1")則出現HtmlElement轉型String錯誤。如果把Souce Code中Test(bool b)的順序移到Test(double d)之前,則1, true, 3.14都會傳回Bool。
    以此推測,Silverlight應是透過嘗試轉型來處理同參數數目的Overloading識別,1, true, 3.14都可被視為Boolean或Double,因此以Method的先後決定。而其餘非String的型別會被當成String處理,多半會造成轉型失敗。

由以上測試結果,建議不要依賴參數型別做為Javascript呼叫Silverlight時Overloading的依據,還是回歸參數數目區隔較為保險,避免自找麻煩。

歡迎推文分享:
Published 30 April 2010 12:33 AM 由 Jeffrey
Filed under: ,
Views: 7,706



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<April 2010>
SunMonTueWedThuFriSat
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication