0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Hamster OutputAdvent Calendar 2024

Day 22

【C#】継承についてざっくり学ぶ

Last updated at Posted at 2024-12-25

はじめに

この記事はHamster Output Advent Calendar 2024の22日目の記事です!

今さらですが、継承をあまり使ったことが無かったので勉強したいと思います。

参考にしたリンク

継承って

1つのスクリプトを元に新しいスクリプトを作ることができる機能で、処理を再利用したい時に使う...ふむふむ何で今まで使って無かったんだ...自分は?

UnityだとMonoBehaivourとかまさにそうですね。StartとかUpdateを色んな場所で再利用してます。

試しに作ってみる

・継承元を作る

ここで、継承で使うprotectedというアクセス修飾子やvirtualというキーワードがでてきます。

using UnityEngine;

public class TestBase : MonoBehaviour
{
    protected void TestMethod()
    {
        Debug.Log("TestBase TestMethod");
    }

    public virtual void Log()
    {
        Debug.Log("TestBase Log");
    }
}

・protected

継承先ではpublicとして扱い、それ以外ではprivateとして扱われる

・virtual

継承先で上書き変更ができる

・継承先を作る

そして継承元を利用するクラスを作りました。Unity公式が出しているデザインパターンのサンプルでSingletonも継承でSingletonにすることができるというのもありました。

継承して面白いなと思ったのが継承元の継承先の内容が使える事ですかね...Testクラスが継承しているのはTestBase何ですが、MonoBehaviourのメソッドが使えるんですよね...

変数を継承元に用意しても、継承先で利用することも可能...だと...便利

public class Test : TestBase
{
    private void Start()
    {
        // 継承元のメソッドを呼び出す
        TestMethod();
        Log();
    }

    private void Update()
    {

    }

    // Baseのメソッドを上書きした
    public override void Log()
    {
        Debug.Log("Test Log");
    }
}

他クラスからの参照方法

TestBaseを元としているので、TestBaseを型にしてTestを取得することもできます。

public class Banana : MonoBehaviour
{
    private void Start()
    {
        TestBase testBase = GetComponent<Test>();
    }
}

まとめ

再利用したい時に継承は物凄く使いやすい。ただ、継承元を少し改良したいとなった時に、継承しているクラスが多いと変更が難しくなりそうだと感じた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?