Некоторая практика C# 11 и 12 не удалась

Я практикую новые функции C# 11 и 12, поэтому написал такой интерфейс и класс:

      public interface IHello<T> where T: class 
{
    static abstract IHello<T> operator +(IHello<T> left, IHello<T> right);
    
    public string Value { get; }
}
    
public class Hello(string value) : IHello<string> // Error CS0535 'Hello' does not implement interface member 'IHello<string>.operator +(IHello<string>, IHello<string>)'
{
    public string Value { get; } = value;
    
    public static IHello<string> operator +(Hello left, IHello<string> right)
    {
        return new Hello(left.Value + right.Value);
    }
}

Однако при определении класса я получаю сообщение об ошибке:

Ошибка CS0535 «Привет» не реализует член интерфейса «IHello.operator +(IHello, IHello)»

Если я изменю подпись оператора, чтобы она напрямую соответствовалаIHello<string>реализуемый интерфейс:

      public class Hello(string value) : IHello<string>
{
    public string Value { get; } = value;

    public static IHello<string> operator +(IHello<string> left, IHello<string> right) // Error CS0563 One of the parameters of a binary operator must be the containing type
    {
        throw new NotImplementedException();
    }
}

Тогда ошибка становится:

Ошибка CS0563 Один из параметров бинарного оператора должен иметь содержащий тип.

Есть ли способ согласовать их и реализовать этот интерфейс?

0 ответов

Другие вопросы по тегам