うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【C#】メソッドをオーバーライドしているかどうか判定する

using System;
using System.Reflection;
 
private static bool IsOverrideMethod(Type type, string methodName)
{
    var method = type.GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic);
    if (method == null)
        return false;

    return method.DeclaringType != method.GetBaseDefinition().DeclaringType;
}

確認コード

using UnityEngine;
 
public class SampleMonoBehaviour : MonoBehaviour
{
    private class BaseClass
    {
        protected virtual void BaseMethod()
        {
            Debug.Log("CaseClass");
        }
    }
 
    private class Class1 : BaseClass
    {
    }
 
    private class Class2 : BaseClass
    {
        protected override void BaseMethod()
            {
                Debug.Log("Class2");
            }
    }
 
    private void Awake()
    {
        var class1 = new Class1();
        var class2 = new Class2();
        
        // false
        Debug.Log(IsOverrideMethod(class1.GetType(), "BaseMethod"));
        // true
        Debug.Log(IsOverrideMethod(class2.GetType(), "BaseMethod"));
    }
}