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

本文关键字:接口 调用 方法 窗体 Windows 中从 我们 | 更新日期: 2023-09-27 18:30:52

>假设我有一个实现search()函数的接口,我有一个Windows表单,button_click应该能够调用search()方法。这可能吗?任何帮助将不胜感激。

谢谢

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

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

假设您有以下界面

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

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

然后可以像这样实现的属性

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

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

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();

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

protected void SearchButton_Click(object sender, EventArgs e) {
    if (_searchProvider == null) {
        // search provider wasn't set
        return;
    }
    var result = _searchProvider.Search(GetSearchRequest());
    // handle the result
}
private ISearchRequest GetSearchRequest() {
    // return a search request, for this question is currently null
    return null;
}