0

我有以下情况:

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

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

4

1 回答 1

0

C#只支持单继承,即每个类只能从一个超类继承一个。但是,您在第一堂课和第二堂课中都有MyTableClass扩展。这就是导致编译错误的原因。DataTablepartialIDetailTable

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

public partial class MyTableClass : IDetailTable

public class MyAwesomeTableClass : MyTableClass
于 2013-08-24T21:09:09.073 回答