为什么PowerShell使用双冒号(::)来调用.NET类的静态方法?

时间:2013-07-20 06:33:42

标签: powershell

有没有具体的理由使用c ++样式的双冒号'::'?为什么不使用像c#这样的简单点?

1 个答案:

答案 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版。