【发布时间】:2015-12-11 16:41:36
【问题描述】:
如果我在同一个命名空间下定义 2 个不同类中的 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 是从它继承而来的?您能否解释一下它是如何使用 shared 覆盖函数的?这有什么关系?
【问题讨论】:
-
“这是什么意思?” - 堆栈溢出。
-
已编辑。谢谢
-
我还是说-“堆栈溢出”。
-
您的
ICacheManager实例上实际上有两个函数Get<T>(string)和Get<T>(string, Func<T>)。当您致电_cacheManager.Get(key,()=>myfunction())时,只有第二个匹配。这里没有歧义,你在问什么? -
这段代码是递归的——你从不调用实例方法,只调用静态方法。你到底想达到什么目的?
标签: c# static-methods virtual-functions