派生クラスごとにメソッドを階層的に呼び出す方法ですか?派生クラスごとにメソッドを呼び出す
私はそれをユーザスクリプトで使用する必要があるので、ユーザにbase.Update();を呼び出させることはできません。
ベースコールをしたかどうかにかかわらず呼び出す必要があります。
public class Base
{
public virtual void Update()
{
Console.WriteLine("BASE UPDATE");
;
}
}
public class Base2 : Base
{
public override void Update()
{
Console.WriteLine("BASE2 UPDATE");
;
}
}
public class Base3 : Base2
{
public override void Update()
{
// base.Update() ? no no, i want to do it for User Scripts so i cant force user to call base.Update()
Console.WriteLine("BASE3 UPDATE");
}
}
public class TestClass
{
public void DoTheTest()
{
Base3 instance = new Base3();
instance.Update();
// the output i need:
/*
BASE UPDATE
BASE2 UPDATE
BASE3 UPDATE
*/
}
}
正確には重複しない - その答えは単一の基本メソッドを呼び出す方法を示しています。OPは、実際にそれをコーディングすることなくすべてのオーバーライドされた基本メソッドを階層的に呼び出す必要があります。 – PaulF
いいえ、C#はこれを保証する手段を提供しません。 Mark Phillipsの回答のリンク(http://stackoverflow.com/questions/3747711/call-base-function-then-inherited-function)に示されている*テンプレートパターン*は、 100%に収まらない。 – Heinzi
言語はそうした方法では機能しません。あなたは何をしようとしていますか、Unityを書き直していますか? –