2015-06-03 4 views
2

Если я объявить тип данных, как это:Различия в типах данных из двух подходов

Add-Type -TypeDefinition "public class MyTest {}" 

, а затем создать объект и получить его тип данных, я получаю MyTest, как я бы ожидать:

(new-object MyTest).GetType().Name 

, но если я отношусь к типу непосредственно ...

[MyTest].GetType().Name 

Я получаю RuntimeType. может ли кто-нибудь объяснить, что здесь происходит?

ответ

4

Это не имеет никакого отношения к командному устройству Add-Type; это относится ко всем типам PowerShell:

PS > (1).GetType().Name 
Int32 
PS > [int].GetType().Name 
RuntimeType 

вещь, как (new-object MyTest) и 1 являются экземплярами определенных типов. Вызов .GetType() на них возвращает тип этих экземпляров.

[MyTest] вещи, как и [int] однако являются экземплярами RuntimeType класса, который представляет все типы PowerShell во время выполнения (вещи в [...]). Вот почему [MyTest].GetType().Name возвращает RuntimeType. Вы в основном получаете тип самого класса MyTest, а не его экземпляры.

Ниже приводится визуальная разбивка:

new-object MyTest # MyTest instance 
[MyTest]   # RuntimeType instance 
1     # Integer instance 
[int]    # RuntimeType instance 
+0

ой ... Я понимаю. поэтому [int] совпадает с (1) .GetType() – ekkis