C# 我们可以用c从windows窗体调用接口方法吗?

C# 我们可以用c从windows窗体调用接口方法吗?,c#,interface,windows-forms-designer,C#,Interface,Windows Forms Designer,假设我有一个实现搜索功能的界面,我有一个windows窗体,单击按钮应该能够调用搜索方法。可能吗?任何帮助都将不胜感激 谢谢是的,在任何基于OOP的语言中,只使用对象的定义是一种常见的做法,以便以后可以更改实现细节 假设您有以下接口 public interface ISearchProvider { ISearchResult Search(ISearchRequest request); } 如果现在在windows窗体中实现一个通过构造函数参数设置的属性,则可以创建一个窗体,该

假设我有一个实现搜索功能的界面,我有一个windows窗体,单击按钮应该能够调用搜索方法。可能吗?任何帮助都将不胜感激


谢谢

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

假设您有以下接口

public interface ISearchProvider {
     ISearchResult Search(ISearchRequest request);
}
如果现在在windows窗体中实现一个通过构造函数参数设置的属性,则可以创建一个窗体,该窗体可以为特定存储库实现多个版本的ISearchProvider,例如:Sql、FileSystem、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();
然后我们可以用以下方式调用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();
在表单中,根据按钮单击,您可以执行如下搜索:

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;
}

你的界面实现了搜索功能?请发布您的代码并重新组织您的问题…现在它非常混乱