簡體   English   中英

無法使用派生類實現屬性

[英]Cannot implement property using derived class

public interface IBase
{
    int Id { get; set; }
}

public interface IDerivedA : IBase
{
    int Name { get; set; }
    int Quantity { get; set; }
}

public interface IDerivedB : IBase
{
    string Name { get; set; }
    IEnumerable<IDerivedA> DerivedBs { get; set; }
}

這是一個將被序列化的類的實現,但是當我嘗試使用DerivedASerialize類時出現編譯錯誤,該類是IDerivedA接口的派生類

[MessagePack.Union(0, typeof(DerivedASerialize))]
[MessagePack.Union(1, typeof(DerivedBSerialize))]
[MessagePack.MessagePackObject(true)]
public class BaseSerialize : IBase
{
    public int Id { get; set; }
    public bool IsNull { get;set; }
}

[MessagePack.MessagePackObject(true)]
public class DerivedASerialize : BaseSerialize, IDerivedA
{
    public int Name { get; set; }
    public int Quantity { get; set; }
}

[MessagePack.MessagePackObject(true)]
public class DerivedBSerialize : BaseSerialize, IDerivedB
{
    public string Name { get; set; }
    public IEnumerable<DerivedASerialize> DerivedBs { get; set; }
}

有什么解決辦法嗎? 因為我只能序列化類。

我想要另一個也從相同接口派生且具有不同屬性的類

使用neuec的MessagePack。

編輯:將序列化邏輯添加到類。

如果需要兩個不同的“名稱”字段,則可以使用顯式接口實現:

public class DerivedBSerialize : BaseSerialize, IDerivedB
{
    public string Name { get; set; }
    public IEnumerable<DerivedASerialize> DerivedBs { get; set; }
    string IDerivedB.Name { get; set; }
    IEnumerable<IDerivedA> IDerivedB.DerivedBs { get; set; }
}

如果您只需要一個“名稱”字段-您可以將其提升為“ IBase”,或創建另一個接口-

interface INameable { string Name {get; set;} }

暫無
暫無

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

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