2013-09-24 94 views
5

Tôi có một lớp như như sauSử dụng Powershell để truy cập lớp tĩnh trong một lớp tĩnh

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

Tôi có thể lấy myValue sử dụng PowerShell,

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

Nhưng tôi không thể nhận được lớp trong lớp myChildValue. Có ai giúp được không?

Nghĩ rằng nó có thể giống như dưới đây nhưng $ childValue luôn trống.

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

Trả lời

8

Đó là [Foo.Bar.ParentClass+ChildClass]. Trên hoàn thành tab PowerShell 3 sẽ cho bạn biết nhiều. Hơn nữa, bạn có thể sử dụng Add-Type để biên dịch và nạp mã trực tiếp:

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 

Không cần phải fiddle xung quanh với các trình biên dịch C# và [Assembly]::LoadWithPartialName.

+0

Cảm ơn bạn, điểm bổ sung để trả lời quá nhanh. Đó là những gì + dấu hiệu cho, vì vậy nếu có một lớp bên dưới lớp con nó sẽ cho tôi Foo.Bar.ParentClass + ChildClass + ChildOfChildClass – Cann0nF0dder

+2

'+' là từ tên nội bộ của lớp đó. C# sử dụng dấu chấm '.' để tách cả không gian tên và các lớp lồng nhau, nhưng bản thân .NET thì không. Điều này trở nên rõ ràng khi bạn sử dụng phản ánh để truy cập các loại cũng (và cũng là tài liệu [có] (http://msdn.microsoft.com/library/w3f99sx1.aspx), khoảng một nửa xuống trang). Vì vậy, có, các lớp lồng nhau lồng nhau sẽ sử dụng '+' là tốt. – Joey

+0

Cảm ơn bạn đã liên kết và giải thích. – Cann0nF0dder