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# は単一継承のみをサポートします。つまり、各クラスは 1 つのスーパークラスから 1 つしか拡張できません。ただし、最初のクラスと2 番目のクラスをMyTableClass拡張しています。それがコンパイルエラーの原因です。DataTablepartialIDetailTable

あなたが本当に得ようとしているのは、2番目partialのクラスが実際にextendは wsdl 定義クラスからのものであるべきだと思います。だから私は変わるだろう

public partial class MyTableClass : IDetailTable

public class MyAwesomeTableClass : MyTableClass
于 2013-08-24T21:09:09.073 に答える