[英]What is the difference between a static class and a namespace? (in C#)
我看到的唯一區別是您不能使用“using staticClass”聲明。
因此,我想知道:
是的, static
類在技術上是一種類型。 它可以有成員(字段、方法、事件)。 命名空間只能保存類型(並且它本身不被視為“類型”; typeof(System)
是編譯時錯誤)。
沒有直接等同於為靜態類的命名空間添加using
指令。 但是,您可以聲明別名:
using ShortName = ReallyReallyLongStaticClassName;
並使用
ShortName.Member
在提及其成員時。
此外,您可以使用靜態類在其他類型上聲明擴展方法並直接使用它們,而無需顯式引用類名:
public static class IntExtensions {
public static int Square(this int i) { return i * i; }
}
並使用它:
int i = 2;
int iSquared = i.Square(); // note that the class name is not mentioned here.
當然,如果類未在根或當前命名空間中聲明,您必須為包含該類的命名空間添加using
指令以使用擴展方法。
靜態類仍然是一個類。 它可以包含方法、屬性等。命名空間只是一個命名空間。 它只是區分同名類聲明的幫手。
函數不能單獨存在於命名空間中,它屬於一個類。
如果您需要一個靜態函數而不提及類的名稱,那么擴展可能就是您正在尋找的。
public static class MathExtensions
{
public static int Square(this int x)
{
return x * x;
}
}
//...
// var hundredSquare = 100.Square();
另一個區別是命名空間可以跨越多個程序集,而類則不能。
據我了解,命名空間只是一種語言特性; 它們被編譯刪除。 換句話說,.NET 運行時不會“看到”命名空間,而只是碰巧包含點的類名。 例如, System
命名空間中的String
類被 .NET 運行時視為名為System.String
的類,但根本沒有命名空間的概念。
然而,靜態類完全由 .NET 運行時理解和管理。 它們是成熟的類型,您可以對它們使用反射。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.