我们可以在 c# 中从 windows 表单调用接口方法吗?
Can we call interface methods from windows forms in c#?
假设我有一个实现 search() 函数的接口,并且我有一个 windows 表单,在 button_click 上应该能够调用 search() 方法。那可能吗 ?任何帮助将不胜感激。
谢谢
是的,在任何基于 OOP 的语言中,仅使用对象的定义是一种常见的做法,以便以后可以更改实现细节
假设您有以下界面
public interface ISearchProvider {
ISearchResult Search(ISearchRequest request);
}
如果您现在在 windows 表单中实现一个 属性,它通过构造函数参数设置,您可以创建一个可以为特定存储库实现多个版本的 ISearchProvider 的表单(例如: Sql、文件系统、Csv、...)
属性你可以这样实现
private readonly ISearchProvider _searchProvider;
public SearchForm(ISearchProvider searchProvider) {
_searchProvider = searchProvider;
}
然后,调用 class 必须使用 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;
}
假设我有一个实现 search() 函数的接口,并且我有一个 windows 表单,在 button_click 上应该能够调用 search() 方法。那可能吗 ?任何帮助将不胜感激。
谢谢
是的,在任何基于 OOP 的语言中,仅使用对象的定义是一种常见的做法,以便以后可以更改实现细节
假设您有以下界面
public interface ISearchProvider {
ISearchResult Search(ISearchRequest request);
}
如果您现在在 windows 表单中实现一个 属性,它通过构造函数参数设置,您可以创建一个可以为特定存储库实现多个版本的 ISearchProvider 的表单(例如: Sql、文件系统、Csv、...)
属性你可以这样实现
private readonly ISearchProvider _searchProvider;
public SearchForm(ISearchProvider searchProvider) {
_searchProvider = searchProvider;
}
然后,调用 class 必须使用 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;
}