簡體   English   中英

由多個包含不同數據類型的相同成員的接口派生

[英]Deriving by multiple Interfaces containing same members with different data types

我有以下情況:

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

僅實現基本接口,而不實現派生的詳細信息接口。 但為什么?

C#僅支持單繼承,即每個類只能從一個超類擴展一個。 但是,在第一個partial類中有MyTableClass擴展了DataTable ,在第二個partial類中有IDetailTable 這就是導致編譯錯誤的原因。

我想你真正想要知道的是,第二partial類實際上應該extend從WSDL定義類。 所以我會改變

public partial class MyTableClass : IDetailTable

public class MyAwesomeTableClass : MyTableClass

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM