2016-08-20 18 views
5

私は静的なクラスの内部で働くには$thisが必要です!それを達成する方法?回避策はありますか?私はクラスの文脈でGet-PSCallStackの返品を分析して何も役に立たないことを見つけました。PowerShell静的クラスメソッドの中で現在のクラス名/オブジェクトを取得する方法は?

(a)ロギングと(b)同じクラスの他の静的メソッドを何度も何度も呼び出すことなく呼び出すためには、これが必要です。

サンプルコード(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

Typo:_not available_ –

+2

これは技術的にはこの質問と重複しています。http://stackoverflow.com/questions/2113069/c-sharp-getting-its-own-class-name PowerShellのようにC#で(静的メソッドのために)求めていることをするのは面倒です。 –

+0

@Chris Dent: '[System.Reflection.MethodBase] :: GetCurrentMethod()。DeclaringType'は機能していないようです。 GetCurrentMethod()の結果は、メソッドが動的であることを示します。とにかくC#では、 'static void DoSomething(){DoAnything();}という完全な参照なしにDoSummethingからDoAnythingを呼び出すことができます。 } '。これはPowerShellにはありません。 –

答えて

1

静的クラスはthisポインタを持っていません。それらはオブジェクトの一部として クラスレベルで存在していないので、このポインタを持っていない、MSDN

静的メンバ関数を参照してください。 のエラーは静的メソッドでこれを参照してください。

クラス名でメソッドを呼び出す必要があります。

+0

すぐに応答していただきありがとうございますPawel、しかし明らかにあなたの提案は問題を解決しません。私の質問に示したように少なくとも1つの回避策 '$ static_this = [foo]'があります。ちょうど良いものを探しています。 –

関連する問題