2009-04-27 6 views
2

J'écris une classe qui doit prendre un objet, enregistrer son état actuel, mettre à jour l'objet et le passer à une autre classe. Le seul problème est que vous ne pouvez hériter que d'une classe et j'en ai besoin pour hériter d'une classe dans mon projet. Je m'intéresse à System.IO.Stream parce que je peux si nécessaire, déplacer cette classe à son propre thread sans la plupart des sockets et autres méthodes de l'IPC. Le principal problème est, y at-il une interface pour System.IO.Stream? Si non, y a-t-il un moyen d'obtenir la fonctionnalité que je veux sans sacrifier les données critiques du projet dont je dépend? (Je suis désolé si je sonne un peu discoherent, je ne suis pas sûr de savoir comment cette question mot.)Existe-t-il une interface pour System.IO.Stream?

Répondre

5

Il semble que IEnumerable<T> est un meilleur ajustement - cours d'eau sont bons pour passer octets autour, mais itérateurs sont bons pour représenter des flux d'objets plus généraux.

Vous voudriez quelque chose qui lit à partir d'un flux (par exemple une socket) et des objets créés, probablement avec des blocs d'itération C# (déclarations de rendement, etc.). Ensuite, vous pouvez utiliser les fonctions de traitement, les filtres, etc. sur le IEnumerable<T>, et le renvoyer dans un socket (ou un autre flux d'octets) plus tard.

Pour répondre à la question - non, Stream n'a pas d'interface, mais la pertinence de la partie de votre question relative au filetage n'est pas claire. Est-ce que vous êtes intéressé par les opérations d'asynchronisation? Pourquoi voulez-vous une interface pour le streaming?

+0

Je vais jouer avec IEnumerable et rendre compte. Je pense qu'une partie de mon problème est que je suis debout depuis 48 heures et que je suis fatigué. –

+2

Après avoir lu sur IEnumerable , cela fonctionnera beaucoup mieux. Je vous remercie. –

+0

Bon - mais allez au lit avant de l'essayer :) –

1

l'implémentation de l'interface ne vous donnera aucune fonctionnalité de la classe, elle laissera simplement savoir aux autres classes que vous fournissez cette fonctionnalité. Si vous avez vraiment besoin d'avoir plusieurs héritages (deux classes de base pour que vous puissiez obtenir la fonctionnalité des deux), pouvez avoir votre classe de base, celle dont vous avez vraiment besoin, être une sous-classe de Stream lui-même.

public class MyObject : Base Object 
{ 

} 

public class BaseObject : Stream 
{ 

} 

etc ..?

contexte/contexte peut aider.

0

Il est vraiment difficile de comprendre ce que vous essayez de faire ici. Cela ressemble à un candidat à l'agrégation par rapport à l'héritage. Au lieu d'étendre System.IO.Stream, pourquoi ne pas en passer un dans l'objet à utiliser? Cela peut être une propriété ou une méthode get/set, et si vous passez l'objet à un autre thread, le flux va avec.

Questions connexes