Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PowerShell使用双冒号(::)来调用.NET类的静态方法? 有没有特殊的理由使用双冒号C++的样式::?为什么不使用像c#这样的简单点呢_Powershell - Fatal编程技术网

为什么PowerShell使用双冒号(::)来调用.NET类的静态方法? 有没有特殊的理由使用双冒号C++的样式::?为什么不使用像c#这样的简单点呢

为什么PowerShell使用双冒号(::)来调用.NET类的静态方法? 有没有特殊的理由使用双冒号C++的样式::?为什么不使用像c#这样的简单点呢,powershell,Powershell,对于正在运行的Windows PowerShell来说,这是一个问题 ::运算符是静态成员访问器。而圆点 运算符检索实例成员,双冒号运算符 访问类上的静态成员,就像连接一样 方法在上一节末尾的示例中。左操作数 对静态成员的访问器必须是类型 文本或返回类型的表达式,如下所示: PS (1) > $t = [string] PS (2) > $t::join('+',(1,2,3)) 1+2+3 PS (3) > 语言设计团队选择使用单独的运算符 访问静态方法是因为静态方法

对于正在运行的Windows PowerShell来说,这是一个问题

::运算符是静态成员访问器。而圆点 运算符检索实例成员,双冒号运算符 访问类上的静态成员,就像连接一样 方法在上一节末尾的示例中。左操作数 对静态成员的访问器必须是类型 文本或返回类型的表达式,如下所示:

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++中的四位点操作符解析范围/命名空间不同。