Давайте рассмотрим пример. Если вы правильно понимаете, 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;}
Согласно документации :
Чтобы получить информацию о членах c, члены класса, а не экземпляра, используют параметр Stati c.
Но если я запускаю [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. Это члены c членов System.IO.FileStream
, а не System.RuntimeType
. Почему это так?
В документации также говорится:
Мы используем :: , чтобы указать Windows PowerShell что мы хотим работать с методом или свойством stati c.
Это заставило меня понять, что [System.IO.FileStream]::Null
относится к свойству stati c Null
класса System.IO.FileStream
.
Q2. Означает ли это, что Powershell иногда видит [System.IO.FileStream]
как класс System.IO.FileStream
(при работе с членами stati c), а иногда как экземпляр System.RuntimeType
?