.NET(C#):很少被注意的Assembly.CreateQualifiedName和Type.ReflectionOnlyGetType方法

來源:互聯網
上載者:User

不過兩者都很好理解。

Assembly.CreateQualifiedName用來構建一個完整的類型路徑,該路徑包含程式集名稱,這個路徑可以用在Type.GetType靜態方法中(或者後面要講的Type.ReflectionOnlyGetType靜態方法)。通常構建此類路徑的時候,開發人員直接通過字串串連把類型的全名稱和程式集的名稱中間加一個逗號就可以了,不過還是有必要提一下.NET Framework中有這樣的方法。

 

範例程式碼:

namespace Mgen

{

    class Program

    {

        class Nested

        {

            public class Nested2 { }

        }

        static void Main(string[] args)

        {

            var fullname = Assembly.CreateQualifiedName(Assembly.GetExecutingAssembly().FullName, typeof(Nested.Nested2).FullName);

            Console.WriteLine(fullname);

        }

    }

}

 

輸出:

Mgen.Program+Nested+Nested2, Mgen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

 

第二個要說的方法就是Type.ReflectionOnlyGetType。這個方法同Type.GetType方法類似,唯一的區別就是如果包含類型的程式集會被載入到只可以反射的上下文中(Reflection-Only上下文),所得到的類型是不可以執行的。

 

代碼:

class Program

{

    static void Main(string[] args)

    {

        var ad = AppDomain.CreateDomain("domain");

        Console.WriteLine("Type.ReflectionOnlyGetType之前");

        PrintAssemblies(ad);

 

        //在指定應用程式定義域中調用Type.ReflectionOnlyGetType

        ad.DoCallBack(() =>

        {

            var names = Assembly.CreateQualifiedName(Assembly.GetExecutingAssembly().FullName,

                typeof(Program).FullName);

            Type.ReflectionOnlyGetType(names, true, false);

        });

 

        Console.WriteLine("Type.ReflectionOnlyGetType之後");

        PrintAssemblies(ad);

    }

 

    //輸出應用程式定義域中ReflectionOnly上下文中的程式集

    static void PrintAssemblies(AppDomain ad)

    {

        foreach (var ass in ad.ReflectionOnlyGetAssemblies())

            Console.WriteLine(ass.FullName);

    }

}

 

輸出:

Type.ReflectionOnlyGetType之前

Type.ReflectionOnlyGetType之後

Mgen, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

可以看到,在調用Type.ReflectionOnlyGetType,程式集被載入到了應用程式定義域的反射內容中。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.