有没有具体的理由使用c ++样式的双冒号'::'?为什么不使用像c#这样的简单点?
答案 0 :(得分:24)
这是Windows PowerShell的一个问题。
::运算符是静态成员访问器。而点 operator检索实例成员,双冒号运算符 访问类上的静态成员,就像连接一样 最后一节末尾示例中的方法。左操作数 静态成员访问器必须是一个类型 - 或者是一个类型 文字或返回类型的表达式,如您所见:
PS (1) > $t = [string] PS (2) > $t::join('+',(1,2,3)) 1+2+3 PS (3) >
语言设计团队选择使用单独的运算符 由于静态方法的原因,访问静态方法 访问。这是问题所在。如果你有一个带静态的MyModule类型 属性名为Module,然后是表达式
[MyModule].Module
是 暧昧。这是因为还有一个实例成员模块 表示MyModule类型的System.Type实例。现在你不能 告诉System.Type上的“Module”实例成员或“Module” 应检索MyModule上的静态成员。通过使用 双冒号运算符,你消除了这种歧义。
注意强>
其他语言 通过使用typeof()运算符来解决这种歧义。运用 typeof()在这个例子中,typeof(我的模块).Module检索 Type对象上的实例属性和MyModule.Module检索 由MyModule类实现的静态属性。
Bruce Payette(2011-08-02 16:22:31.490000-05:00)。 Windows PowerShell在行动,第二版(Kindle位置4494-4507)。曼宁出版物。 Kindle版。