これは重複している可能性がありますが、この動作を説明するスレッドは見つかりません。 Action
(少なくとも基本的に戻り型のないFunc)には関係しません。それは静的な参照と関係がある。System.Actionおよび非静的変数
これらの2つの例を見てください。私はただSystem.Action OnButton1Down
を購読して、Action
が.Invoke()
で呼び出されたときに非静的関数を呼び出すようにしようとしています。
最初の方法は機能しますが、2番目または3番目の方法は機能しないのはなぜですか?私はむしろAction
を保存/作成しなければなりませんので、私は単に行うことによって、策略なしに再びそれを解除することができます:OnButton1Down - =
System.Action OnButton1Down;
void MyNonStaticFunction() { }
// This example works
void MyFirstFunction()
{
OnButton1Down +=() => { MyNonStaticFunction(); };
}
// This example gives the following error on "MyNonStaticFunction()":
// "A field initializer cannot reference the non-static field, method
// or property MyNonStaticFunction()."
System.Action MyAction =() => { MyNonStaticFunction(); };
void MySecondStartFunction()
{
OnButton1Down += MyAction;
}
// This example is to show what happens, if I just try to subscribe the raw
// method to the Action, as suggested in the comments.
// It gives the following error on "MyNonStaticFunction()":
// "Cannot implicitly convert type 'void' to type 'System.Action'."
void MyThirdStartFunction()
{
OnButton1Down += MyNonStaticFunction();
}
私は一種のエラーが意味をなすことを理解し、私はしないでください最初の例がOKである理由を参照してください。むしろ他の例のどちらかをやることができるはずです。
コードを画像ではなくテキストとして送信してください。それをVisual Studioにコピーして貼り付け、問題を再現して解決策を試すことができます。 –
'_playerInput.OnButton1Down + = MyNonStaticFunction;'と書いているのはなぜですか? 'OnButton1Down'はどのようにdelcared/typedですか? –
ここで言及したC#8でこれを許可しようとしています。https://www.kenneth-truyers.net/2016/01/20/new-features-in-c-sharp-7/ ... FYI – thanatorr