2016-08-20 12 views
5

Statik sınıfta çalışmak için $this'a ihtiyacım var! Bunu nasıl başarabilirim? Herhangi bir geçici çözüm var mı? Sınıf bağlamında Get-PSCallStack'un geri dönüşünü analiz ettim ve yararlı bir şey bulamadım.PowerShell statik sınıf yöntemi içinde geçerli sınıf adı/nesnesi nasıl edinilir?

(a) günlüğe kaydetme ve (b) aynı sınıftaki diğer statik yöntemleri tekrar tekrar isminden bahsetmeden çağırmak için buna ihtiyacım var.

örnek kod (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() 
+0

Yazım hatası: _not available_ –

+2

Teknik olarak bu sorunun bir kopyası: http://stackoverflow.com/questions/2113069/c-sharp-getting-its-own-class-name. PowerShell'de olduğu gibi C# 'de sorduğun şeyi (statik yöntemler için) yapmak gibi dağınık. –

+0

@Chris Dent: '[System.Reflection.MethodBase] :: GetCurrentMethod() DeclaringType' işe yaramaz. GetCurrentMethod() 'nin öznitelikleri, yöntemin dinamik olduğunu gösterir. Neyse, C# DoAything'den doSomething'den, tam anlamıyla, "statik boşluk" DoSomething() {DoAnything(); } '. Tam olarak bu PowerShell'de eksik. –

cevap

1

Statik sınıfları this işaretçiyi yok. onlar bir nesnenin parçası olarak sınıf düzeyinde var ve çünkü bir bu işaretçi yok, MSDN

Statik üye işlevlerini bakın. Bu, için bir hataya statik bir yöntemle bakın.

Sınıf adına göre yöntemi çağırmanız gerekir.

+0

Pawel'e hızlı bir şekilde yanıt verdiğiniz için teşekkür ederiz, ancak öneriniz sorunu çözmüyor. Benim sorum olarak belirttiğim gibi en az bir geçici çözüm var $ static_this = [foo] '. Sadece daha iyisini arıyorum. –

İlgili konular