C#与静态属性或方法的接口?

时间:2012-02-10 22:26:48

标签: c# .net .net-4.0 interface static

我需要在我的业务逻辑的某些类中定义静态属性或方法,以明确确定哪些类是ASP.NET服务的Session或Cache中的可缓存。我在想,界面中的静态属性或方法是完美的,但C#4.0不支持这一点。

所有需求都能够在通用管理器中评估哪些类是可缓存的,如果是,则在哪个级别:会话(用户)或缓存(应用程序)。

现在我正在尝试使用带有T参数的空接口进行评估,但是,可能存在更好的方法?感谢。

public interface ICacheable<T>
{
}

public class Country : ICacheable<CacheApplication>
{
}

public class Department : ICacheable<CacheUser>
{
}

public class Gestor<T>
{
    // ...
    if (typeof(T) is ICacheable<CacheApplication>)
    {
    }
    // ...
}

2 个答案:

答案 0 :(得分:12)

如何使用自定义属性?然后你的课程看起来像这样:

[Cacheable(Level = CacheLevels.Application)]
public class Country { }

[Cacheable(Level = CacheLevels.User)]
public class Department { }

您可以read here了解如何创建自己的自定义属性,然后使用反射访问其值。

答案 1 :(得分:2)

你不能定义静态接口,首先,你不能创建静态类的实例,所以你不能用相同的基类代替它们。

你可能最好拥有一个类的单例实例并正常使用接口。您也可以通过工厂模式强制执行一个和一个实例。