C# 在调用时检测子类是否对基类的方法进行了重写

public bool IsOverrideOnNothing()
{
    var mName = nameof(OnNothing);
    var key = this.GetType().FullName + "_" + mName;
    if (!_overrideCache.ContainsKey(key))
    {
        //查找 protected https://stackoverflow.com/questions/3393975/getting-methodinfo-for-protected-and-public-methods-only
        var m = this.GetType().GetMethod(mName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        var isOverride = !(m.DeclaringType == typeof(Test));
        _overrideCache.Add(key, isOverride);
    }
    return _overrideCache[key];
}

public static Dictionary<string, bool> _overrideCache { get; private set; }
     = new Dictionary<string, bool>();
posted @ 2022-05-20 11:49  trykle  阅读(98)  评论(0)    收藏  举报