让我们举个例子。如果正确理解,System.IO.FileStream是类,但[System.IO.FileStream]是对象:它是类System.RuntimeType的实例。
如果我运行[System.IO.FileStream] | Get-Member,我将得到System.RuntimeType的成员(从技术上讲,它的实例):
TypeName: System.RuntimeType
Name MemberType Definition
---- ---------- ----------
AsType Method type AsType()
Clone Method System.Object Clone()
Equals Method bool Equals(System.Object obj), bool Equals(type o)
FindInterfaces Method type[] FindInterfaces(System.Reflection.TypeFilter filter, System.Object filterCriteria)
...
TypeHandle Property System.RuntimeTypeHandle TypeHandle {get;}
TypeInitializer Property System.Reflection.ConstructorInfo TypeInitializer {get;}
UnderlyingSystemType Property System.Type UnderlyingSystemType {get;}根据文献资料
要获取有关静态成员的信息,类的成员而不是实例的成员使用静态参数。
但是如果我现在运行[System.IO.FileStream] | Get-Member -Static,我会得到:
TypeName: System.IO.FileStream
Name MemberType Definition
---- ---------- ----------
Equals Method static bool Equals(System.Object objA, System.Object objB)
ReferenceEquals Method static bool ReferenceEquals(System.Object objA, System.Object objB)
Synchronized Method static System.IO.Stream Synchronized(System.IO.Stream stream)
Null Property static System.IO.Stream Null {get;}Q1.这些是System.IO.FileStream**,的静态成员,而不是** System.RuntimeType**.。为什么?**
文献资料还说:
我们使用::向PowerShell表示我们希望使用静态方法或属性。
这使我意识到[System.IO.FileStream]::Null指的是类System.IO.FileStream的静态属性Null。
Q2.这是否意味着Powershell有时将[System.IO.FileStream] System.IO.FileStream 看作类System.IO.FileStream(在处理静态成员时),有时将其视为 System.RuntimeType**?**的实例。
发布于 2020-05-04 03:30:41
默认情况下,不带-Static的Get成员 总是对输入对象E 213的类型E 112执行操作。
[System.IO.FileStream]是PowerShell类型文字([<type-name>])的一个实例,它的类型是System.RuntimeType,它是一个PowerShell内部类,派生自System.Reflection.TypeInfo,最终是System.Type。
因此,[System.IO.FileStream] | Get-Member输出有关System.RuntimeType成员的信息-以及任何类型的文字(例如,[int] | Get-Member将产生相同的输出)。
相比之下,Get-Member 和 -Static
[System.IO.FileStream];否则,与往常一样,将对输入对象的类型进行操作。因此,[System.IO.FileStream] | Get-Member -Static报告System.IO.FileStream类型的静态成员,就像传递System.IO.FileStream类型的实例一样;例如,[System.IO.FileStream]::new($PROFILE, 'Open') | Get-Member -Static
一个奇怪的遗漏是,无法使用Get-Member 请求实例成员E 264E 165按类型< PowerShell >E 266>;获取类型实例成员的唯一方法是将实际实例作为输入传递;然而,挑战是实例并不总是容易获得,因此按类型获取实例成员将有帮助,即这个GitHub问题请求。
同时,您可以在一个类型上调用.GetMembers(),正如您在自己的答案这里中演示的那样。
https://stackoverflow.com/questions/61584267
复制相似问题