解决方法或替代接口上没有静态方法

时间:2010-09-09 21:59:24

标签: c# search interface

我正在我的应用程序中实现一些天真的搜索,搜索将在几种不同的对象类型(客户,约会,活动等)上进行。我正在尝试创建一个具有可搜索类型的界面。我想做的是这样的事情:

public interface ISearchable
{
    // Contains the 'at a glance' info from this object 
    // to show in the search results UI
    string SearchDisplay { get; }

    // Constructs the various ORM Criteria objects for searching the through 
    // the numerous fields on the object, excluding ones we don't want values 
    // from then calls that against the ORM and returns the results
    static IEnumerable<ISearchable> Search(string searchFor);
}

我已经在我的一个域模型对象上有一个具体的实现,但我想将它扩展到其他人。

问题很明显:你不能在接口上使用静态方法。是否有其他规定的方法来完成我正在寻找的方法,或者是否有解决方法?

3 个答案:

答案 0 :(得分:3)

接口确实指定了对象的行为,而不是类。在这种情况下,我认为一种解决方案是将其分为两个接口:

public interface ISearchDisplayable
{
    // Contains the 'at a glance' info from this object 
    // to show in the search results UI
    string SearchDisplay { get; }
}

public interface ISearchProvider
{
    // Constructs the various ORM Criteria objects for searching the through 
    // the numerous fields on the object, excluding ones we don't want values 
    // from then calls that against the ORM and returns the results
    IEnumerable<ISearchDisplayable> Search(string searchFor);
}

ISearchProvider的实例是进行实际搜索的对象,而ISearchDisplayable对象知道如何在搜索结果屏幕上显示自己。

答案 1 :(得分:0)

我真的不知道C#的解决方案,但根据this question,Java似乎有同样的问题,解决方案只是使用singleton对象。

答案 2 :(得分:0)

看起来您至少需要一个其他类,但理想情况下,每个ISearchable都不需要单独的类。这限制了您对Search()的一个实现;必须编写ISearchable才能适应这种情况。

public class Searcher<T> where T : ISearchable
{
    IEnumerable<T> Search(string searchFor);
}