.NET(C#):DLR有趣的調用自己的動態對象

來源:互聯網
上載者:User

一個動態對象竟然支援自己調用自己,根據MSDN的解釋,此項功能僅在C#中被支援,VB並不可以。具體過程則是改寫動態對象(DynamicObject類)的TryInvoke方法。和普通函數調用的TryInvokeMember方法類似。TryInvoke的第一個參數是Binder:InvokeBinder。但是和TryInvokeMember的InvokeMemberBinder不一樣,它沒有Name屬性,因為對象自己調用自己自然沒有方法名稱。其他屬性不需要多說明,CallInfo代表調用資訊。ReturnType表示傳回型別(繼承自DynamicMetaObjectBinder)。

 

下面建立一個動態對象(通過繼承DynamicObject類型):

    //+ using System.Dynamic;

    class DynObj : DynamicObject

    {

        public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)

        {

            //輸出參數

            Console.WriteLine("參數:" + String.Join(", ", args));

            //設定傳回值

            result = "傳回值:Mgen";

            return true;

        }

    }

 

然後調用自己:

    //建立

    dynamic d = new DynObj();

    //調用

    var res = d(1, 2, "str");

    //輸出傳回值

    Console.WriteLine(res);

 

輸出:

參數:1, 2, str

傳回值:Mgen

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.