通过包含具有不同数据类型的相同成员的多个接口派生

时间:2013-08-24 20:42:20

标签: c# interface derived

我有以下情况:

using System.Data;

namespace TestClass
{
    //this is a class generated by a wsdl and may not be changed
    public partial class MyTableClass : DataTable
    {
        public MyRowClass this[int index]
        {
            get { return ((MyRowClass) (this.Rows[index])); }
        }

        public partial class MyRowClass : DataRow
        {
            protected internal MyRowClass(DataRowBuilder builder)
                : base(builder)
            {
            }
        }
    }

    //in this partial class I am able to extend the wsdl class by my own interfaces
    public partial class MyTableClass : IDetailTable
    {
        IDetailRow IDetailTable.this[int index]
        {
            get { return this[index]; }
        }

        public partial class MyRowClass : IDetailRow
        {
        }
    }

    public interface IBaseTable
    {
        IBaseRow this[int index] { get; }
    }

    public interface IDetailTable : IBaseTable
    {
        new IDetailRow this[int index] { get; }
    }

    public interface IBaseRow
    {
    }

    public interface IDetailRow : IBaseRow
    {
    }
     }

第一部分是由wsdl定义生成的类。我没有能力在这里改变任何东西。 我有很多wsdl定义文件,大多数都非常相似。所以我想为所有人定义通用接口,这将使我在代码中更容易处理它们。 所以我的想法是通过上面的部分类定义来扩展它们。

但我在这里收到错误,我不知道为什么以及我应该在这做什么:

  

错误1'TestClass.MyTableClass'没有实现接口成员'TestClass.IBaseTable.this [int]'。 'TestClass.MyTableClass.this [int]'无法实现'TestClass.IBaseTable.this [int]',因为它没有匹配的返回类型'TestClass.IBaseRow'。 c:\ users \ mag \ documents \ visual studio 2012 \ Projects \ TestClass \ TestClass \ Class1.cs 6 24 TestClass

仅实现基接口,而不是派生的详细接口。但为什么呢?

1 个答案:

答案 0 :(得分:0)

C#仅支持单继承,即每个类只能从一个超类扩展一个。但是,您在第一个MyTableClass课程中DataTable延长partial,在第二个IDetailTable课程中partial。这就是造成编译错误的原因。

我认为你真正想要的是第二个extend类实际上应该来自wsdl定义类public partial class MyTableClass : IDetailTable 。所以我会改变

public class MyAwesomeTableClass : MyTableClass

{{1}}