簡體   English   中英

為什么C#為`using`定義了兩種不同的用途?

[英]Why does C# define two different uses for `using`?

更多的問題出於好奇而不是任何事情,但為什么C#為關鍵字using定義了兩個不同的“目的”? 一方面,它是一個指令......

用於為命名空間創建別名或導入在其他命名空間中定義的類型。

另一方面,這是一個......

定義一個范圍,在該范圍之外將放置一個或多個對象。

對我而言,對於相同的關鍵字似乎有不同的用途,但也許我錯過了一些東西。 這個關鍵字有兩個不同的用途嗎? 或者,這兩個目的,在編譯器的腹部深處,真的是一樣的東西?

我問埃里克利珀在他的博客在幾年前同樣的問題在這里 (見第一注釋)。

他的回答是:

這是一個棘手的語言設計點; 當一個關鍵字用於表示兩個完全不同的概念時,它可能會令人困惑。 但是,每個概念引入一個新關鍵字會讓語言感覺有點臃腫。 我個人會為指令表單選擇“導入”或一些這樣的語法,以確保它不會與語句形式混淆,但我理解它是一個判斷調用。

我們正在為C#4.0設計一個被削減的功能,這是另一種形式的“部分”類; 基本上,一種在機器生成的和用戶生成的部分類的一半之間共享屬性元數據的方法。 我繼續使用關鍵字“partial”作為特征,因為我們在C#中對於“部分”有三個微妙的不同含義,我覺得這兩個太多了。 (我主張添加另一個條件關鍵字“現有”。不幸的是,由於缺少時間,因此該功能被削減了,這一點最終沒有實際意義。) - Eric

對於那些不知道Eric是誰的人,他是C#編譯器團隊的開發人員。

我無法看到這兩種用法在編譯器中是如何相同的。

我認為雙重使用的原因僅僅在於關鍵字非常適合這兩個目的,並且沒有歧義的危險(一個是指令,另一個是語句,因此它們出現在完全不同的上下文中)。 我認為這是完全沒有問題-語言應該有少量的關鍵字以及它們的用途應該是很容易理解-這對雙方使用的情況下using

作為Linkgorn在評論中提到,同樣情況的另一個例子是where也有兩處(通用約束和LINQ查詢語法)是否存在。

首先,它們都適合這個詞,因為它們都不能在同一個環境中使用,所以它們不能相互混淆。

除了任何措辭偏好之外,原因是語言關鍵字的數量。

關鍵字與任何庫類等分開。 我可以創建一個名為DateTime的方法,而不會破壞或重疊DateTime類型,因為我可以使用命名空間來指定我想要的那個。 但是你不能*創建一個名為“public”的方法或變量,因為它是一個語言關鍵字。

因此,大多數語言都試圖將關鍵字的數量保持在最低限度(有些甚至誇耀關鍵字使用的次數很少)。 用作關鍵字的英語的每個單詞對於程序員來說都不可用於其他用途。 在可能的情況下,最好重用現有的關鍵字,而不是從程序員字典中永久刪除另一個頁面(特別是如果已經使用了該語言,在這種情況下,新關鍵字將破壞使用它作為標識符的任何代碼)

暫無
暫無

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

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