Реализация интерфейса по умолчанию вызывает объект ToString вместо этого ⇐ C#

Место общения программистов C#
Anonymous
Реализация интерфейса по умолчанию вызывает объект ToString вместо этого

Сообщение Anonymous »

У меня определен следующий интерфейс:

Код: Выделить всё

public interface INameable
{
/// 
/// The customer provided name of the object
/// 
public string Name { get; set; }

/// 
/// combination of the ObjectName and the customer provided name used to quickly display items in lists to prevent the need for reflexction
/// 
public string ObjectAndName => $"({ObjectName}) {Name}";

/// 
/// The coloquial name of the object
/// 
public string ObjectName { get; }
}
это помогает считывать различные классы из базы данных и отображать их в пользовательском интерфейсе без прямого использования отражения.
один класс, реализующий это интерфейс выглядит так:

Код: Выделить всё

public class Ink : Changeable, INameable
{
[Key]
public Guid InkId { get; init; } = Guid.NewGuid();
public string Color { get; set; }
public string Name { get => Color; set => Color = value; }
public string ObjectName => "Ink";
}
когда я ссылаюсь на Имя, это выглядит так:
[img]https: //i.sstatic.net/eATiMJEv.png[/img]

когда я ссылаюсь на ObjectName, это выглядит так:
< img alt="введите описание изображения здесь" src="https://i.sstatic.net/nYdadrPN.png" />
Оба ожидаемы, оба имеют реализации для конкретного класса. Однако когда я ссылаюсь на свойство по умолчанию ObjectAndName, оно использует метод ToString класса:
[img]https: //i.sstatic.net/8M6hJMuT.png[/img]

Я знаю, что это метод ToString, потому что в других классах в том же списке (для простоты отфильтровано по картинкам) ) он отображает результаты их конкретной реализации ToString.
почему ссылка на реализацию интерфейса по умолчанию для ObjectAndName, определенного в интерфейсе, не вызывается при ссылке?

Подробнее здесь: https://stackoverflow.com/questions/791 ... ng-instead

Вернуться в «C#»