【C#】newとoverrideの違い

  • |
【C#】newとoverrideの違い
   

クラスを継承する際に、メソッドを定義する際に色々と方法があります。
この際に、newを使う場合、またoverrideを使う場合があり、今ままでその辺りを特に意識しないで利用していたので、改めて勉強をしてみました。

Override と New

実際にコードを見てどのような挙動になるのか試してみます。
// スーパークラス
public class NewAndOverride : MonoBehaviour {

	public void NewMethod()
	{
		Debug.LogError("NewAndOverride - NewMethod");

	}

	public virtual void OverrideMethod()
	{
		Debug.LogError("NewAndOverride - OverrideMethod");

	}
}

//サブクラス
public class SubNewAndOverride : newAndOverride{

	public new void NewMethod()
	{
		Debug.LogError("SubNewAndOverride - NewMethod");

	}

	public override void OverrideMethod()
	{
		Debug.LogError("SubNewAndOverride - OverrideMethod");

	}
}

まずは、スーパクラスとサブクラスを作成します。
それぞれ、メソッドを定義をして、newキーワードとvirtualキーワードをつけます。

NewAndOverride hoge = gameObject.AddComponent<newAndOverride> ();
hoge.OverrideMethod ();
hoge.NewMethod ();

SubNewAndOverride subHoge = gameObject.AddComponent<SubNewAndOverride> ();
subHoge.OverrideMethod ();
subHoge.NewMethod ();

NewAndOverride sub2Hoge = gameObject.AddComponent<SubNewAndOverride> ();
sub2Hoge.OverrideMethod ();
sub2Hoge.NewMethod ();


Unity上で試しているのでAddComponentを利用しています。

結果は以下の様なログが吐き出されます。
NewAndOverride - OverrideMethod
NewAndOverride - NewMethod

SubNewAndOverride - OverrideMethod
SubNewAndOverride - NewMethod

// newの場合は指定された型のメソッドが呼び出されます。
SubNewAndOverride - OverrideMethod
NewAndOverride - NewMethod


newとoverrideの違いは、インスタンスした時の方がスーパークラス・サブクラスで呼び出されるメソッドが違うことです。
ジェネリックを利用する場合に、スーパークラスで格納する場合などの場合、型の違いで上手く動かなくなる場合があります。

詳しくはこちらを参照に。
Override キーワードと New キーワードを使用する場合について
Override キーワードと New キーワードによるバージョン管理 (C# プログラミング ガイド)

Related Posts Plugin for WordPress, Blogger...