簡體   English   中英

編譯器如何推斷委托示例中的類型?

[英]How does the compiler infer types in the delegate example?

在下面的委托示例中,編譯器如何推斷變量alpha的類型是什么?

delegate double Doubler(double x);

public class Test
{
    Doubler dbl = (alpha) => //How does it determine what type is alpha?
    {
        return alpha * 2
    };

    Console.WriteLine(dbl(10)); //Is it when the method is called?  int here;

    Console.WriteLine(dbl(5.5)); //double here???
}

我在一個網站上發現了這個聲明,我想根據回答,這是不正確的?

“在我們的例子中,我們指定了參數的類型。如果你願意,你可以讓編譯器找出參數的類型。在這種情況下,只傳遞參數的名稱而不是它的類型。這是一個例子: “

您在委托中聲明它。

delegate double Doubler(double x);

x是你的alpha。

您可以使用以下命令輕松替換代碼:

Doubler dbl = delegate (double x)
{
   return x*2;
};

您還可以簡化lambda表達式:

Doubler dbl = alpha => alpha*2;

這種語言功能看起來很簡單,但實際上非常復雜。 這里需要花費太多空間來准確描述此功能的所有后果。 如果您真的對編譯器如何計算lambda的形參的類型感興趣,那么您應該閱讀我討論如何執行此操作的五篇系列文章,以及對編譯器設計的后果。

這是我所有文章的存檔,我討論了lambda表達式的含義:

http://blogs.msdn.com/ericlippert/archive/tags/Lambda+Expressions/default.aspx

您應該閱讀題為“Lambda表達式與匿名方法”的系列。

如果您對編譯器如何執行其他類型推斷感興趣,請參閱我的文章存檔:

http://blogs.msdn.com/ericlippert/archive/tags/Type+Inference/default.aspx

如果你是那種喜歡觀看視頻閱讀文字的人,這里是我在2006年制作的視頻,解釋了一些類型推斷場景:

http://blogs.msdn.com/ericlippert/archive/2006/11/17/a-face-made-for-email-part-three.aspx

您在定義Doubler委托時指定了輸入類型為double。 對於這兩個示例,輸入類型是double。

暫無
暫無

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

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