Некоторая практика 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 Один из параметров бинарного оператора должен иметь содержащий тип.
Есть ли способ согласовать их и реализовать этот интерфейс?