Tôi cần $this
để làm việc bên trong lớp tĩnh! Làm thế nào để đạt được điều đó? Có cách giải quyết nào không? Tôi đã phân tích sự trở lại của Get-PSCallStack
trong ngữ cảnh lớp học và không tìm thấy gì hữu ích.Cách lấy tên/đối tượng lớp hiện tại bên trong phương thức lớp tĩnh của PowerShell?
Tôi cần điều này để (a) ghi nhật ký và (b) gọi các phương thức tĩnh khác của cùng một lớp mà không nhắc đến tên của nó nhiều lần.
Mẫu mã (PowerShell v5):
class foo {
static [void]DoSomething() {
[foo]::DoAnything() #works
#$this.DoAnything #not working
$static_this = [foo]
$static_this::DoAnything() #works
}
static [void]DoAnything() {
echo "Done"
}
}
[foo]::DoSomething()
Lỗi: _không có sẵn_ –
Đây thực chất là bản sao của câu hỏi này: http://stackoverflow.com/questions/2113069/c-sharp-getting-its-own-class-name. Thật là lộn xộn khi làm những gì bạn yêu cầu (đối với các phương thức tĩnh) trong C# vì nó nằm trong PowerShell. –
@Chris Dent: '[System.Reflection.MethodBase] :: GetCurrentMethod(). DeclaringType' dường như không hoạt động. Các thuộc tính của 'GetCurrentMethod()' kết quả chỉ ra rằng phương thức là động. Dù sao trong C# bạn có thể gọi DoAnything từ DoSomething mà không có tham chiếu đầy đủ là 'static void DoSomething() {DoAnything(); } '. Chính xác điều này tôi đang thiếu trong PowerShell. –