根据值切换类

时间:2012-04-16 15:30:30

标签: c#

我有两个共享相同方法的类,我想根据需要在代码中切换它们。如果你看下面的例子,你会发现相同的代码部分是重复的。 CacheFile和CacheMemory类是相同的,我确信这个代码可以缩小,并且可以切换CacheFile和CacheMemory类。

    if (_cacheLocation == CacheLocation.File)
    {
        if (!CacheFile.Get(key, out value))
        {
            // Do lookup based on caller's logic.   
            context.Proceed();
            value = context.ReturnValue;
            CacheFile.Add(value, key, _cacheType, _expiry);
        }
    }

    if (_cacheLocation == CacheLocation.Memory)
    {
        if (!CacheMemory.Get(key, out value))
        {
            // Do lookup based on caller's logic.   
            context.Proceed();
            value = context.ReturnValue;
            CacheMemory.Add(value, key, _cacheType, _expiry);
        }
    }

4 个答案:

答案 0 :(得分:4)

如果使CacheLocation和Cache Memory实现公共接口,则可以使用接口而不是单个类。

http://msdn.microsoft.com/en-us/library/ms173156.aspx

答案 1 :(得分:2)

使用封装复制行为的类(定义公开此行为的接口)。在两个类上实现此接口,这两个类执行CacheLocation.File和CacheLocation.Memory的预期操作。

然后,您可以使用返回ICache的工厂,给定一个CacheLocation,消费者可以使用它而不知道它在下面使用的是哪种实际商店。

答案 2 :(得分:0)

有几种方法可以解决这个问题。如果CacheMemory和CacheFile相互继承,或者是公共基类,则可以声明父类的变量并使用它。或者,如果您不希望从另一个派生出一个(或者从公共基础派生两者),您可以让它们实现公共接口并使用声明为接口实例的变量。

答案 3 :(得分:0)

您可以如下定义接口,从中继承CacheFile和CacheMemory。

public interface ICache
{
   Get();
   Add();
}

它可以减少代码膨胀。