为什么PowerShell使用双冒号(::)来调用.NET类的静态方法? 有没有特殊的理由使用双冒号C++的样式::?为什么不使用像c#这样的简单点呢
对于正在运行的Windows PowerShell来说,这是一个问题 ::运算符是静态成员访问器。而圆点 运算符检索实例成员,双冒号运算符 访问类上的静态成员,就像连接一样 方法在上一节末尾的示例中。左操作数 对静态成员的访问器必须是类型 文本或返回类型的表达式,如下所示:为什么PowerShell使用双冒号(::)来调用.NET类的静态方法? 有没有特殊的理由使用双冒号C++的样式::?为什么不使用像c#这样的简单点呢,powershell,Powershell,对于正在运行的Windows PowerShell来说,这是一个问题 ::运算符是静态成员访问器。而圆点 运算符检索实例成员,双冒号运算符 访问类上的静态成员,就像连接一样 方法在上一节末尾的示例中。左操作数 对静态成员的访问器必须是类型 文本或返回类型的表达式,如下所示: PS (1) > $t = [string] PS (2) > $t::join('+',(1,2,3)) 1+2+3 PS (3) > 语言设计团队选择使用单独的运算符 访问静态方法是因为静态方法
PS (1) > $t = [string]
PS (2) > $t::join('+',(1,2,3))
1+2+3
PS (3) >
语言设计团队选择使用单独的运算符
访问静态方法是因为静态方法是
访问。问题出在这里。如果您有一个带有静态
属性称为Module,然后是表达式
[MyModule]。模块
是
模棱两可的。这是因为上还有一个实例成员模块
表示MyModule类型的System.Type实例。现在你不能
告诉系统上的“模块”实例成员。键入或键入“模块”
应检索MyModule上的静态成员。通过使用
使用双冒号运算符,可以消除这种歧义
注意
其他语言
通过使用typeof()操作符来避免这种歧义。使用
在本例中,typeof(My Module).Module检索
类型对象和MyModule上的实例属性。Module检索
由MyModule类实现的静态属性
布鲁斯·帕耶特(2011-08-02 16:22:31.490000-05:00)。运行中的Windows PowerShell,第二版(Kindle位置4494-4507)。曼宁出版社。Kindle版完整性:这与C++中的四位点操作符解析范围/命名空间不同。