如何从界面覆盖方法?

时间:2017-07-07 17:24:26

标签: c# winforms c#-4.0 interface

我有一个界面:

interface ISqlite
{
     DataTable select(SQLiteDatabase db);
}

实现它:

public DataTable select(ISqlite s) {

    return s.select(driver);

}

正如您所看到的,方法select的描述为DataTable类型。

如何覆盖此方法以使其不返回DataTable,而是返回数组或任何其他类型?

我的意思是:

public Array select(ISqlite s) {

    return s.select(driver);

}

2 个答案:

答案 0 :(得分:1)

创建接口是为了防止你这样做。

相反,这样做:

interface ISqliteDatatable
{
     DataTable selectDataTable(SQLiteDatabase db);
}
interface ISqliteArray
{
     Array selectArray(SQLiteDatabase db);
}

然后当你上课时,根据你的需要决定实现哪个界面。

此解决方案可能仍然不完全正确,但我们不了解您的整体设计,因此任何进一步的更正都会更高。

以下是如何实现这两个方法:

public class example : ISqliteArray : ISqliteDataTable
{

    public DataTable selectDataTable(SQLiteDatabase db)
    {
        // Do stuff and return a datatable
    }


    public Array selectArray(SQLiteDatabase db)
    {
        // Do stuff and return an array
    }
}

答案 1 :(得分:0)

您无法更改方法的返回类型(例如"覆盖"正如您在问题中所写的那样) 考虑使用abstract class如果您不需要继承另一个类,您将能够指定方法的默认实现。
您需要为每种返回类型编写一个单独的方法。