如果我在同一名称空间下定义了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
类而不是CachManager
类,尽管ICacheManager
是从它继承的?您能否解释一下如何使用共享覆盖函数?如何相关?
答案 0 :(得分:1)
基本上,扩展方法不是函数覆盖。 更准确 - 覆盖适用于虚拟(抽象)功能。在你的情况下 - 它更接近于超载。
基本上,扩展只是一个糖,因为没有Action1(Action2(Action3(Action4(obj)))),但扩展将被转换为此。
https://msdn.microsoft.com/en-us//library/bb383977.aspx
如果您需要从扩展程序调用实例方法 - 请使用在“this”关键字下传递的引用。