带有静态 class 的虚函数?

Virtual function with static class?

如果我在相同的命名空间下定义 2 个不同的 classes 中的 2 个函数,如下所示

namespace Cache
{ 
    /// <summary>
    /// Cache manager interface
    /// </summary>
    public interface ICacheManager
    {
        T Get<T>(string key);
    }
}

namespace  Cache
{
    class CacheManager : ICacheManager
    {
        public virtual T Get<T>(string key)
        {
            return (T)Cache[key];
        }
    }
}

namespace Cache
{
    public static class CacheExtensions
    {
        public static T Get<T>(this ICacheManager cacheManager, string key, Func<T> acquire)
        {
            return Get(cacheManager, key, 60, acquire);
        }
    }
}

如果我创建一个实例

ICacheManager _cacheManager;

并且当我使用这样的参数调用 _cacheManager.Get(key,()=>myfunction()) 方法时,它将重定向到 CacheExtensions class 而不是 CachManager class 尽管 ICacheManager是从那里继承来的?你能解释一下它是如何用共享覆盖一个函数的吗?那是如何关联起来的?

基本上,扩展方法不是函数覆盖。 更准确地说 - 覆盖适用于虚拟(抽象)功能。在你的情况下 - 它更接近于超载。

基本上,extensions只是一个糖而已,因为没有Action1(Action2(Action3(Action4(obj)))),但是extensions会翻译成这个

https://msdn.microsoft.com/en-us//library/bb383977.aspx

如果您需要从扩展中调用实例方法 - 使用在 'this' 关键字下传递的引用。