1

我开始使用接口,但我真的不明白......情况是这样的:有一个 web 控件(称为 TableControl),它使用转发器显示项目表。TableControl 还包括一行实现分页的游标(第一个、上一个、下一个、最后一个)。游标是从另一个 webControl (CursorControl) 导入的。TableControl 还实现了一个接口,我在其中声明了一些方法来进行分页。

*) 光标控制

 public class CursorControl 
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private string cursor_value;

    public string CursorValue
    {
        get { return cursor_value; }
        set { cursor_value = value; }
    }

    // Called when cursor is clicked.
    protected void lnkClick_Command(object sender, CommandEventArgs e)
    {
        cursor_value = e.CommandArgument.ToString();
    }

}

*) 表格控件

public partial class TableControl : System.Web.UI.UserControl, IPageableControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(isPostBack)
         {
               currentPage = CursorControl.CursorValue;
               OtherPage(currentPage);
          }
    }

    public int currentPage;

    void IPageableControl.OtherPage(int i)
    {
        if (i == 0)
            currentPage = 2;
        else if (i == 1 || i == (-1))
            currentPage += i;
        else
            currentPage = 25;

    }


 }

*) 界面

   public interface IPageableControl
{
    // Summary:
    //     Go to page
    void OtherPage(int i);
}

当用户单击光标时,我将值传递给 TableControl,它应该启动方法 OtherPage。但它不起作用,它说 OtherPage 不在当前上下文中。

如何访问接口的方法?

4

1 回答 1

1

你需要做这一行:

void IPageableControl.OtherPage(int i)

进入这个:

void OtherPage(int i)

第一个是显式的,第二个是隐式的。(有什么区别?

  • 当您明确提及接口类型时,您需要将类型转换为它才能访问这些方法。(为什么要显式实现接口?
  • 当您隐式实现时,您只需将其视为常规方法(实现完全相同,编译器将确保它存在,因此您不必担心它。在代码中您不会看到任何区别。 如果您确实想查看(这有帮助),您可以获得一个插件。ReSharper 做得很好)。

顺便说一句,在 Visual Studio 上,当你想实现一个接口时,在接口名称上按Ctrl+ .(点),它会询问你如何实现它。它使它变得不那么乏味,因为您不必自己输入签名(方法名称)。

Visual Studio 实现接口

于 2013-01-30T12:04:34.290 回答