我有以下情况:
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
仅实现基接口,而不是派生的详细接口。但为什么呢?
答案 0 :(得分:0)
C#仅支持单继承,即每个类只能从一个超类扩展一个。但是,您在第一个MyTableClass
课程中DataTable
延长partial
,在第二个IDetailTable
课程中partial
。这就是造成编译错误的原因。
我认为你真正想要的是第二个extend
类实际上应该来自wsdl定义类public partial class MyTableClass : IDetailTable
。所以我会改变
public class MyAwesomeTableClass : MyTableClass
到
{{1}}