#c# #interface
#c# #интерфейс
Вопрос:
Например, у меня есть два класса. У каждого из них есть Deconstruct()
метод. Как я могу представить это в интерфейсе?
public class A
{
public Foo Foo { get; }
public Bar Bar { get; }
public Baz Baz { get; }
public (Foo, Bar, Baz) Deconstruct()
{
return (Foo, Bar, Baz);
}
}
public class B
{
public Foo Foo { get; }
public Bar Bar { get; }
public (Foo, Bar) Deconstruct()
{
return (Foo, Bar);
}
}
public interface IDeconstructable
{
(variable return type) Deconstruct();
}
Комментарии:
1. Короткий ответ — вы не можете, поскольку возвращаемый тип отличается.
2. Вот ошибка : две разные сигнатуры методов подразумевают два разных метода… Но, возможно, вы можете использовать обобщения. Вам нужны обобщения?
3. С точки зрения приведенных ниже общих ответов, я бы сказал, только потому, что вы можете , это не значит, что вы должны . Вероятно, это должны быть разные методы, которые выполняют разные действия и имеют разные имена
Ответ №1:
Я могу придумать 2 способа сделать это, но ни один из них не подойдет для использования с разными типами возвращаемых данных.
public interface IDeconstructable<T>
{
T Deconstruct();
}
Затем вызовите его как public class B : IDeconstructable<(Foo, Bar)>
в качестве альтернативы вы могли бы
public interface IDeconstructable
{
dynamic Deconstruct();
}
или
public interface IDeconstructable
{
object Deconstruct();
}
и используйте сопоставление с образцом для определения типа возвращаемого значения