【问题标题】:Can we call interface methods from windows forms in c#? [closed]我们可以在 c# 中从 windows 窗体调用接口方法吗? [关闭]
【发布时间】:2016-01-17 08:57:34
【问题描述】:

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

谢谢

【问题讨论】:

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

标签: c# interface windows-forms-designer


【解决方案1】:

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

假设你有以下界面

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

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

你可以像这样实现的属性

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多