是否有任何特定的理由使用c ++样式的双冒号'::'?为什么不使用像c#这样的简单点?
And*_*ndi 25
这是Windows PowerShell in Action的问题.
::运算符是静态成员访问器.点运算符检索实例成员,而双冒号运算符访问类上的静态成员,就像最后一节末尾的示例中的join方法一样.静态成员访问器的左操作数必须是一个类型 - 类型文字或返回类型的表达式,如下所示:
Run Code Online (Sandbox Code Playgroud)PS (1) > $t = [string] PS (2) > $t::join('+',(1,2,3)) 1+2+3 PS (3) >
由于访问静态方法的方式,语言设计团队选择使用单独的运算符来访问静态方法.这是问题所在.如果您的MyModule类型具有名为Module的静态属性,那么表达式
[MyModule].Module
很暧昧.这是因为System.Type实例上还有一个实例成员Module,表示MyModule类型.现在你无法判断是否应该检索System.Type上的"Module"实例成员或MyModule上的"Module"静态成员.通过使用双冒号运算符,您可以消除这种歧义.
注意
其他语言通过使用typeof()运算符来解决这种歧义.在此示例中使用typeof(),typeof(My Module).Module检索Type对象上的instance属性,MyModule.Module检索MyModule类实现的静态属性.
Bruce Payette(2011-08-02 16:22:31.490000-05:00).Windows PowerShell在行动,第二版(Kindle位置4494-4507).曼宁出版物.Kindle版.
归档时间: |
|
查看次数: |
10158 次 |
最近记录: |