2009-04-27 3 views
2

Я пишу класс, который должен взять объект, записать его текущее состояние, обновить объект и передать его другому классу. Единственная проблема заключается в том, что вы можете наследовать только один класс, и мне нужно, чтобы наследовать класс в моем проекте. Меня интересует System.IO.Stream, потому что я могу при необходимости переместить этот класс в собственный поток без большинства, если не всех сокетов и других методов IPC. Основная проблема заключается в том, есть ли интерфейс для System.IO.Stream? Если нет, есть ли способ получить необходимую функциональность, не жертвуя критическими для проекта данными, от которых я зависим? (Я извиняюсь, если я кажусь немного discoherent, я не совсем уверен, как слово на этот вопрос.)Есть ли интерфейс для System.IO.Stream?

ответ

5

Это звучит как IEnumerable<T> лучше подходит - потоки хороши для прохождения байт вокруг, но итераторы хороши для представления более общих потоков объектов.

Вам нужно что-то, что читается из потока (например, сокета) и созданных объектов, возможно, с блоками-итераторами C# (операторы вывода и т. Д.). Затем вы можете использовать функции обработки, фильтры и т. Д. На IEnumerable<T> и позже взорвать его в сокет (или другой поток байтов).

Чтобы ответить на вопрос - нет, Stream не имеет интерфейса, но неясно, насколько уместен этот вопрос для резьбовой части вашего вопроса. Это то, что вас интересует async IO?

+0

Я буду играть с IEnumerable и отчитаться. Я думаю, что часть моей проблемы заключается в том, что я был в течение 48 часов и устал от усталости. –

+2

После прочтения IEnumerable это будет работать намного лучше. Спасибо. –

+0

Хорошо - но ложись спать, прежде чем пытаться это сделать :) –

1

Зачем вам нужен интерфейс для Stream? реализация интерфейса не даст вам никаких функций из класса, это просто позволит другим классам знать, что вы предоставляете эту функциональность. если ваш REALL REALY должен иметь множественное наследование (два базовых класса, чтобы вы могли получить функциональность от обоих), у вас может ваш базовый класс, который вам определенно нужен, будет подклассом самого Смита.

public class MyObject : Base Object 
{ 

} 

public class BaseObject : Stream 
{ 

} 

и т.д ..?

mroe background/context может помочь.

0

Это действительно сложно понять, что вы пытаетесь сделать здесь.

Это звучит как кандидат на агрегацию по наследованию. Вместо того, чтобы расширять System.IO.Stream, почему бы вам не передать его одному из объектов? Это может быть как свойство или метод get/set, и если вы передаете объект в другой поток, поток будет работать с ним.