带有静态 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' 关键字下传递的引用。
如果我在相同的命名空间下定义 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' 关键字下传递的引用。