簡體   English   中英

為什么需要typeof?

[英]Why is typeof needed?

我不時想到的東西:為什么在C#中需要typeof運算符? 編譯器是否知道public class Animal只是一個類型的定義? 當我需要引用類型時,為什么需要指定SomeMethod(typeof(Animal))

Animal只是類型的名稱, typeof(Animal )返回實際的類型對象( System.Type實例)。 當然,可能只是讓類型名稱在代碼中返回類型對象,但它使編譯器/解析器的工作更加困難(識別類型名稱何時表示typeof或其他) - 因此存在typeof關鍵字。 它也可以使代碼更清晰。

typeof(Class)是將Type表示為文字的唯一方法。 當你編寫Class.SomeField你的意思是靜態字段。 當您編寫typeof(Class).SomeField您引用類Type的對象字段來表示您的類。

沒有typeof確實會引起歧義:

class foo
{
    public static string ToString()
    {
        return "Static";
    }
}
public class Program
{
    private static void Main(string[] args)
    {
        Console.WriteLine(foo.ToString());
        Console.WriteLine(typeof(foo).ToString());
    }
}

footypeof(foo)並不是指同一個東西,並且強迫編譯器假裝它們是個壞主意,即使我們忽略了這種歧義。

對初學者的反思。 當您可以檢查類型本身時,可以獲得許多可能性,而不僅僅是必須知道它暴露的內容,或者根本不存在它。

typeof()允許我獲取Type對象的實例,而不必擁有目標對象的實例。 這反過來讓我在沒有實例的情況下詢問有關該類的問題。

那么,如果不使用typeofoperatore,如何在不實例化類的情況下獲取類的System.Type? 簡單,你不能:D

因為你只需要一個System.Type可以做很多反射,所以這個算子非常方便。

暫無
暫無

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

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