2016-01-17 60 views
-4

假設我有一個實現了search()函數的接口,並且我有一個windows表單,它在button_click上應該能夠調用search()方法。那可能嗎 ?任何幫助,將不勝感激。我們可以從c#中的Windows窗體調用接口方法嗎?

謝謝

+0

您的界面實現搜索功能?請發佈您的代碼並重新構建您的問題....現在,它非常混亂 – Viru

回答

0

是的,這在任何基於面嚮對象語言的普遍做法,以便實現細節可以在以後的時間被更改爲使用對象的唯一定義

比方說,你有以下接口

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

然後,我們可以調用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; 
} 
相關問題