2013-09-24 13 views
5

Ho una classe come il seguenteUtilizzando PowerShell per accedere classe statica all'interno di una classe statica

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

posso ottenere il myValue utilizzando PowerShell,

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

Ma io sono in grado di ottenere la classe all'interno della classe myChildValue. Qualcuno può aiutare?

Pensato che potrebbe essere qualcosa di simile in basso, ma $ childValue è sempre vuoto.

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

risposta

8

È [Foo.Bar.ParentClass+ChildClass]. Il completamento della scheda di PowerShell 3 ti dirà tutto. Inoltre, è possibile utilizzare Add-Type per compilare e caricare il codice direttamente:

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 

Non c'è bisogno di smanettare con il compilatore C# e [Assembly]::LoadWithPartialName.

+0

Grazie, punto extra per rispondere così velocemente. È quello che fa + per, quindi se ci fosse una classe sotto il bambino, mi piacerebbe Foo.Bar.ParentClass + ChildClass + ChildOfChildClass – Cann0nF0dder

+2

Il '+' è dal nome interno di quella classe. C# usa il punto '.' sia per la separazione dei namespace che per le classi nidificate, ma .NET non lo fa. Ciò risulta evidente quando si utilizza la riflessione per accedere anche ai tipi (ed è anche documentato [lì] (http://msdn.microsoft.com/library/w3f99sx1.aspx), a circa metà della pagina). Quindi sì, le classi nidificate annidate useranno anche '+'. – Joey

+0

Grazie per il link e la spiegazione. – Cann0nF0dder

Problemi correlati