2013-09-24 102 views
5

我有一類像下面使用PowerShell靜態類中訪問靜態類

namespace Foo.Bar 
{ 
    public static class ParentClass 
    { 
     public const string myValue = "Can get this value"; 

     public static class ChildClass 
     { 
     public const string myChildValue = "I want to get this value"; 
     } 
    } 
} 

我可以使用PowerShell得到myvalue的,

[System.Reflection.Assembly]::LoadWithPartialName("Foo.Bar") 
$parentValue = [Foo.Bar.ParentClass]::myValue 

但我無法得到類myChildValue中的類。誰能幫忙?

認爲它可能像下面的東西,但$ childValue總是空的。

[System.Reflection.Assembly]::LoadWithPartialName("Foo.Bar") 
$childValue = [Foo.Bar.ParentClass.ChildClass]::myChildValue 

回答

8

這是[Foo.Bar.ParentClass+ChildClass]。在PowerShell 3選項卡上完成會告訴你很多。此外,您還可以使用Add-Type直接編譯並加載代碼:

C:\Users\Joey> add-type 'namespace Foo.Bar 
>> { 
>>  public static class ParentClass 
>>  { 
>>  public const string myValue = "Can get this value"; 
>> 
>>  public static class ChildClass 
>>  { 
>>   public const string myChildValue = "I want to get this value"; 
>>  } 
>>  } 
>> }' 
>> 
C:\Users\Joey> [Foo.Bar.ParentClass+ChildClass]::myChildValue 
I want to get this value 

無需反覆折騰的C#編譯器和[Assembly]::LoadWithPartialName

+0

謝謝你,回答這麼快的額外點。那是什麼+簽名,所以如果有一個類下的子類將它我Foo.Bar.ParentClass + ChildClass + ChildOfChildClass – Cann0nF0dder

+2

+是從該類的內部名稱。 C#對名稱空間分離和嵌套類使用點「。」,但.NET本身不包含。當你使用反射來訪問類型時,這也會變得很明顯(並且在頁面的一半左右也記錄了[there](http://msdn.microsoft.com/library/w3f99sx1.aspx))。所以是的,嵌套的嵌套類也會使用'+'。 – Joey

+0

謝謝你的鏈接和解釋。 – Cann0nF0dder