次の状況があります。
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
派生詳細インターフェイスではなく、基本インターフェイスのみが実装されます。しかし、なぜ?