びぼうろくってみんなやってる

みんなやってるからぼくもやる

仮想抽象インターフェース

  • 使わなかったらすごい忘れそう

  • interface インターフェース

  • abstract 抽象
  • virtual 仮想

  • 以下大体の使い方

public interface IBaseClass
{
    int Level { get; }
    void SetLevel(int level);
}

public abstract class BaseClass : IBaseClass
{
    public int Level { get; private set; }

    public void SetLevel(int level)
    {
        Level = level;
    }

    protected virtual string Path { get; private set; }
    protected abstract string Name { get; }

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

    public abstract void TestAbstract();
}

public class SuperClass : BaseClass
{
    protected override string Path { get { return "Path"; } }
    protected override string Name { get { return "Name"; } }

    public override void TestVirtual()
    {
        base.TestVirtual();
        Debug.Log("TestSuperVirtual");
  }

    public override void TestAbstract()
    {
        Debug.Log("SuperAbstract");
    }
}

public class TestClass
{
    public TestClass()
    {
        //BaseClass baseClass = new BaseClass(); // ←抽象クラスはインスタンス作成できない。
    
        SuperClass superClass = new SuperClass();
        BaseClass baseClass = superClass; //これはできる
        IBaseClass baseInterface = superClass;  //これもできる

        //interfaceで定義したなら派生クラスでもつかえる
        var level = baseInterface.Level;
        level = baseClass.Level;
        level = superClass.Level;

        baseInterface.SetLevel(level);
        baseClass.SetLevel(level);
        superClass.SetLevel(level);

        //baseInterface.TestVirtual();//interfaceでは定義されていないのでできない
        baseClass.TestVirtual();//BaseClassでは定義されているので使える
        superClass.TestVirtual();//SuperClassでoverrideしたMethodを定義している場合、そっちを使う

        baseClass.TestAbstract();//baseClassに代入されているSuperClassのMethodが走る
        superClass.TestAbstract();//同様


    }
}