Неявный generi c тип в интерфейсе - PullRequest
0 голосов
/ 26 мая 2020

У меня один интерфейс:

public interface ILabel <A, F> where A: IAddress where F: IFeatures
{
    A Sender { get; set; }

    A Receiver { get; set; }

    F Features { get; set; }
}

И один класс, унаследованный от этого интерфейса:

public class Label : ILabel<Address, Features>
{
    public int LabelId { get; set; }

    [Required]
    public Address Sender { get; set; }

    [Required]
    public Address Receiver { get; set; }

    [Required]
    public Features Features { get; set; }

    public string Identcode { get; set; }

    public string Base64 { get; set; }
}

Я хотел бы инициализировать объект Label с помощью ILabel без предоставления общих c типов в ILabel, как показано ниже:

ILabel label = new Label();

Я знаю, что это возможно в Java. Вы знаете, как этого добиться? Заранее спасибо!

1 Ответ

0 голосов
/ 26 мая 2020

Я нашел решение:

ILabel:

public interface ILabel
{
    IAddress Sender { get; set; }

    IAddress Receiver { get; set; }

    IFeatures Features { get; set; }
}

Дополнительный новый класс, который используется как абстрактный базовый класс, например мост

public abstract class BaseLabel<A, F> : ILabel where A: IAddress where F: IFeatures
{
    public virtual A Sender { get; set; }

    public virtual A Receiver { get; set; }

    public virtual F Features { get; set; }

    IAddress ILabel.Sender
    {
        get
        {
            return Sender;
        }
        set
        {
            Sender = (A)value;
        }
    }

    IAddress ILabel.Receiver
    {
        get
        {
            return Receiver;
        }
        set
        {
            Receiver = (A)value;
        }
    }

    IFeatures ILabel.Features
    {
        get
        {
            return Features;
        }
        set
        {
            Features = (F)value;
        }
    }
}

И класс Label

public class Label : BaseLabel<Address, Features>
{
    public int LabelId { get; set; }

    public string Identcode { get; set; }

    public string Base64 { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...