2013-09-24 16 views
5

Ich habe eine Klasse, wie wie die folgendenPowershell Verwenden von statischer Klasse innerhalb einer statischen Klasse zuzugreifen

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"; 
     } 
    } 
} 

ich die myValue Power mit bekommen kann,

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

Aber ich bin nicht in der Lage zu bekommen die Klasse innerhalb der Klasse myChildValue. Kann jemand helfen?

Dachte, es könnte etwas wie unten sein, aber $ childValue ist immer leer.

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

Antwort

8

Es ist [Foo.Bar.ParentClass+ChildClass]. Auf der PowerShell 3 Registerkarte wird Ihnen die Fertigstellung sagen. Darüber hinaus können Sie Add-Type verwenden, um direkt den Code zu kompilieren und laden:

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 

Keine Notwendigkeit, mit dem C# -Compiler herumzudaddeln und [Assembly]::LoadWithPartialName.

+0

Vielen Dank, extra Punkt für die Beantwortung so schnell. Ist das was für +, also wenn es eine Klasse unter der Kindklasse gäbe würde es mich Foo.Bar.ParentClass + ChildClass + ChildOfChildClass – Cann0nF0dder

+2

Das '+' ist vom internen Namen dieser Klasse. C# verwendet den Punkt '.' für Namespace-Trennung und geschachtelte Klassen, aber .NET selbst nicht. Dies wird offensichtlich, wenn Sie Reflection verwenden, um auch auf Typen zuzugreifen (und ist auch dort dokumentiert (http://msdn.microsoft.com/library/w3f99sx1.aspx), ungefähr auf halber Seite der Seite). Also ja, verschachtelte verschachtelte Klassen würden auch '+' verwenden. – Joey

+0

Vielen Dank für den Link und die Erklärung. – Cann0nF0dder

Verwandte Themen