我们可以在c#中调用windows窗体中的接口方法吗?

时间:2016-01-17 08:57:35

标签: c# interface windows-forms-designer

假设我有一个实现search()函数的接口,我有一个windows形式,在button_click上应该可以调用search()方法。那可能吗 ?任何帮助将不胜感激。

谢谢

1 个答案:

答案 0 :(得分:0)

是的,在任何基于OOP的语言中,通常的做法是仅使用对象的定义,以便稍后可以更改实现细节

假设您有以下界面

var Regexp = [];
RegExpr.push(Name + ":" + Regexp);

function Check(test) {
    //test will be RBS /PAN
}

如果您现在在Windows窗体中实现了一个属性,它通过构造函数参数设置,您可以创建一个窗体,可以为特定的存储库实现多个版本的ISearchProvider(例如:Sql,FileSystem,Csv,... )

您可以像这样实现的属性

public interface ISearchProvider {
     ISearchResult Search(ISearchRequest request);
}

然后,调用类必须使用ISearchProvider的特定实现来初始化SearchForm。所以,假设我们有一个模拟的ISearchProvider,以下面的方式实现

private readonly ISearchProvider _searchProvider;
public SearchForm(ISearchProvider searchProvider) {
    _searchProvider = searchProvider;
}

然后我们可以通过以下方式调用SearchForm

public class MockedSearchProvider : ISearchProvider {
    public ISearchResult Search(ISearchRequest request) {
        ISearchResult result = null;
        // implement searching here
        return result;
    }
}

在表单中,根据按钮单击,您可以实现搜索:

var form = new SearchForm(new MockedSearchProvider());
form.Show();