我看到的唯一区别是不能使用 "using staticClass" 声明。
因此,我想知道:
- 静态类和命名空间之间是否有真正的区别?
- 是否有可能避免每次调用成员函数都要重写类名?我在思考类似于" using staticClass" 的东西。
我看到的唯一差异是无法使用“ using staticClass”声明。因此,我想知道:
- 静态类和命名空间之间是否存在实际差异?
- 是否有可能避免每次调用成员函数时都必须重写类名?我在思考类似于“ using staticClass”的东西。
我看到的唯一区别是不能使用 "using staticClass" 声明。
因此,我想知道:
我看到的唯一差异是无法使用“ 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
指令,以包含该类的命名空间。
using NamespaceContainingTheStaticClass
. - R. Martinho Fernandesusing
它。如果您在根命名空间中声明一个静态类,则其扩展方法会自动被检索(这就是声明类在根命名空间中不是一个好主意的原因之一)。 - Mehrdad Afshariusing static My.Static.Class;
来使用声明的所有成员和类型作为顶级成员。 - Asad Saeeduddin静态类仍然是一个类。它可以包含方法、属性等。命名空间只是一个命名空间。它只是一个帮助区分具有相同名称的类声明的助手。
函数不能单独存在于命名空间中,它属于一个类。
如果您需要一个不需要提及类名称的静态函数,则扩展可能是您要找的。
public static class MathExtensions
{
public static int Square(this int x)
{
return x * x;
}
}
//...
// var hundredSquare = 100.Square();
另一个区别是命名空间可以跨越多个程序集,而类不能。