Я не знаю, о «элегантный», но вы всегда можете попробовать это:
public delegate string ToStringFunc();
public static void Main(string[] args)
{
dynamic test = new ExpandoObject();
test.ToString = new ToStringFunc(() =>
{
return "Test";
});
Console.WriteLine(test.ToString());
}
Это просто создает значение, называемое ToString
, которое случается, функция делегат, который выглядит как обычный метод подписи для a ToString
функция.
Это позволяет избежать необходимости расширения ExpandoObject
или тому подобного и, похоже, поддерживает то, что я бы назвал «динамическим» чувством, позволяющим определить, как объект «появляется» только во время выполнения. Конечно, что именно означает «динамическое чувство», является полностью субъективным.
EDIT:
Вот версия, которая позволит неявной ToString упомянутых в комментариях с помощью DynamicObject
, но все еще позволяя части возможности «Expando», данное ExpandoObject
: https://gist.github.com/kcuzner/3670e78ae1707a0e959d
Это выходит за рамки того, что просил автор, но я подумал, что я включу его для тех, кто рассматривает этот ответ позже.
Что вы подразумевали под * Но это потеряет чувство «динамического» *? –
Если у меня 10 экземпляров экземпляра diff, и для каждого типа ToString() может потребоваться реализация diff, поэтому мне нужно создать подкласс 10-го класса? @Sriram Sakthivel –