Опт. решение для разделения объектов данных от чтения/записи и отображения
void IReadWrite.Read(Stream s) & void IReadWrite.Write(Stream s) должны быть имплементированы там, где никто не знает об class SomeObject
Это делается еще одним уровнем абстракции. При этом вариантов два:
1) сделать универсальный интерфейс для SomeObject, которым можно было бы абстрагироваться от имен. Например такой:
public interface IDataContent { object this [string propertyName] { get; set; } }
SomeObject должен имплементировать этот интерфейс и именно его передавать ридеру.
2) сделать аналогичную абстракцию для ридера. Так что SomeObject будет получать этот интерфейс при чтении (типа такого: void IReadWrite.Read(IDataContent data)).
запрошена не имплементация ИЕдитор в классе, а наличие метода ГетЕдитор, который возвращает лежащий непонятно где редактор, умеющий работать с объектом, но не знающий фактический тип объекта...
Ну значит где-то должен быть метод, который знает и сам объект и редактор. И тут опять два варианта:
1) этот метод вызывается до того, как создается объект с данными. в этом случае интерфейс IEditor можно передать в конструктор.
2) этот метод можно вызвать непосредственно из геттера.
А вообще, стрелять себе в ногу и потом придумывать решения для элементарных задач - это, судя по всему, местная забава :D