簡體   English   中英

.NET(反射)中的此類型是什么

[英]What is this Type in .NET (Reflection)

.NET中的此類型是什么? 我正在使用反射來獲取所有類的列表,而這一類又出現了。

它是什么? 它從何而來? 如何選擇DisplayClass1名稱? 我搜索了資料來源,卻沒有看到任何東西。 <>是什么意思? c__是什么意思? 有參考嗎?

在此處輸入圖片說明

由於lambda表達式或匿名方法,幾乎​​可以肯定這是由編譯器生成的類。 例如,考慮以下代碼:

using System;

class Test
{
    static void Main()
    {
        int x = 10;
        Func<int, int> foo = y => y + x;
        Console.WriteLine(foo(x));
    }
}

編譯成:

using System;

class Test
{
    static void Main()
    {
        ExtraClass extra = new ExtraClass();
        extra.x = 10;

        Func<int, int> foo = extra.DelegateMethod;
        Console.WriteLine(foo(x));
    }

    private class ExtraClass
    {
        public int x;

        public int DelegateMethod(int y)
        {
            return y + x;
        }
    }
}

...除了使用<>c_displayClass1作為名稱而不是ExtraClass 這是一個難以置信的名稱 ,因為它不是有效的C#-這意味着C#編譯器肯定會知道它不會出現在您自己的代碼中並與它的選擇相沖突。

當然,編譯匿名函數的確切方式是特定於實現的-額外類的名稱選擇也是如此。

編譯器還會為迭代器塊以及(在C#5中)異步方法和委托生成額外的類。

喬恩當然是正確的。 我提供了一個“解碼器環”,用於弄清各種編譯器生成的類型名在這里的含義:

在哪里了解VS調試器的“魔術名稱”

名稱很長,有時我們會抱怨說我們增加了元數據的大小。 我們可能會在將來的任何時候更改名稱生成規則以解決此問題。 因此,不要編寫利用此編譯器實現細節知識的代碼非常重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM