Silverlight Interop 7-Managed Type的傳址與傳值行為

Silverlight傳遞Managed Type到Javascript端時,跟.NET中的原則相仿,Value Type是使用By Value方式,而Reference Type則是By Reference。

用一個範例來驗證這一點:

        [ScriptableType]
        public class RefTypeSample
        {
            public string Name { get; set; }
        }
        private RefTypeSample _rt = new RefTypeSample()
        {
            Name = "RefType"
        };
        [ScriptableMember]
        public RefTypeSample ByRefTest1()
        {
            return _rt;
        }
        [ScriptableMember]
        public void ByRefTest2()
        {
            MessageBox.Show(_rt.Name);
        }
 
        [ScriptableType]
        public struct ValueTypeSample
        {
            public string Name { get; set; }
        }
        private ValueTypeSample _vt = new ValueTypeSample()
        {
            Name = "ValueType"
        };
        [ScriptableMember]
        public ValueTypeSample ByValTest1()
        {
            return _vt;
        }
        [ScriptableMember]
        public void ByValTest2()
        {
            MessageBox.Show(_vt.Name);
        }

在以上的程式中,我們宣告了class RefTypeSample及struct ValueTypeSample。在.NET裡,雖然都只有一個Name屬性,二者最主要的差別在於RefTypeSample類別(class)是Reference Type,而ValueTypeSample結構(struc)是Value Type。[參考: Value Types and Reference Types]。而我們在Silverlight端分別建立了RefTypeSample及ValueTypeSample的實體,將其傳回至Javascript端,並各提供另一個參數用來檢查實體的Name屬性是否被改變。

    var slCtl = sender.getHost();
    var jssk = slCtl.Content.JavascriptSidekick;
    
    var rt = jssk.ByRefTest1();
    alert(rt.Name);
    rt.Name = "ModifiedByJs";
    jssk.ByRefTest2();
    
    var vt = jssk.ByValTest1();
    alert(vt.Name);
    vt.Name = "ModifiedByJs";
    jssk.ByValTest2();

在這個測試中,ByRefTest2()會彈出"ModifiedByJs",證明Silverlight端的物件屬性也被修改了,而ByValTest2()則還是"ValueType",證明RefTypeSample是By Reference傳遞,而ValueTypeSample是By Value傳遞,報告完畢!

歡迎推文分享:
Published 12 May 2010 04:26 PM 由 Jeffrey
Filed under: ,
Views: 8,435



意見

# rocky said on 12 May, 2010 06:50 AM

为了让你早点看见,在这里问一个中文编码的问题哦:

我从FrontPage RPC服务中获取的中文响应编码是:

诉讼

查找了很多资料没有能找到成功解码的办法,不知道你遇见过没有

# Jeffrey said on 12 May, 2010 10:23 AM

to rocky, 我試解碼結果為"诉讼"二字,程式如下:byte[] b = new byte[] { 232, 175, 137, 232, 174, 188 }; string s = Encoding.UTF8.GetString(b);。

我認為這不是正規的編碼,有點像UTF-8被誤解為ASCII編碼後搞出來的。

你的看法呢?

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

5 + 3 =

搜尋

Go

<May 2010>
SunMonTueWedThuFriSat
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

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

文章典藏
其他功能

這個部落格


Syndication