Étendre une interface existante

J'ai rencontré un problème. Je suis à l'aide d'une bibliothèque externe dans mon programme qui fournit une interface, IStreamable (je n'ai pas les sources de cette interface).

Je puis implémenter l'interface dans une DLL que j'ai créé, DFKCamera classe.

Dans mon programme actuel (qui, malheureusement, je ne peux pas modifier complètement parce que je suis en train d'écrire un plugin pour ça) j'ai alors seulement d'avoir accès à ces méthodes de DFKCamera qui sont définies dans l'interface IStreamable. Cependant, j'ai besoin d'accéder à une autre méthode que j'ai écrit dans DFKCamera pour mon plugin de travail (une méthode que le reste du programme n'utilise pas et en tant que tel n'est pas défini dans IStreamable).

Est-il possible d'étendre la définition d'une interface en C#? Si je pouvais prolonger la IStreamable l'interface, puis j'aimerais avoir accès à la nouvelle méthode.

Comme il est, c'est la situation:

//In ProgramUtils.DLL, the IStreamable interface is defined
//I have only the .DLL file available
namespace ProgramUtils {
    public interface IStreamable {
       //some methods
    }
}

//In my DFKCamera.DLL
using ProgramUtils;

class DFKCamera: IStreamable {
    //the IStreamable implementation code
    ....
    //the new method I wish to add
    public void newMethod() {}


//In the the program that uses DFKCamera.DLL plugin
//The program stores plugin Camera objects as IStreamable DLLObject;
IStreamable DLLObject = new DFKCamera();
//This means that I cannot access the new method by:
DLLObject.newMethod(); //this doesn't work!

Est-il un moyen de prolonger la IStreamamble interface avec le newMethod déclaration, même si je n'ai pas accès aux sources pour le IStreamable interface?

Je sais qu'il est possible d'utiliser partiellement les définitions de l'interface pour définir une interface entre fichiers, mais cela ne fonctionne que si le mot clé partial est utilisé dans les fichiers et si ceux-ci sont compilés en un seul .DLL

J'espère que c'est assez clair!

  • Pourquoi ne pouvez-vous pas directement associées au type que vous voulez? (Ou de créer et de mettre en œuvre la nouvelle interface de l'objet qui peut être mieux)
  • Si vous êtes à l'écriture d'un plugin, puis il sonne comme le IStreamable interface est le contrat entre votre plugin et le programme. Si oui, alors même si vous n'avez exposer la nouvelle méthode, comment voulez-vous demander le programme à appeler cette méthode? Si je ne me trompe, et vous êtes le seul à effectuer des appels sur votre objet, puis, bien sûr, il n'y a aucune raison d'étendre l'interface, puisque vous pouvez simplement convertir l'objet à son type réel et l'appel à la méthode directement.
  • Le programme de base utilise IStreamable. Je développe un plugin pour le programme de base que doit utiliser le même IStreamable objet, mais j'ai juste besoin d'ajouter un supplément de Getter/Setter pour une propriété privée (pour que le plugin fonctionne). Pour être plus précis, le programme de base des charges de caméras vidéo et de lire/s'arrête le flux en direct. Mon plugin vise à synchroniser les deux chargés de caméras afin d'avoir une vision en stéréo, le programme d'installation (j'ai besoin de raconter mon appareil photo DLL qu'il est en mode stéréo ou pas, d'où la nécessité d'une nouvelle lecture/définition de la méthode dans la DLL).
  • Qui ne le "dire" dans ce cas? Le programme de base? Une autre partie de votre fichier DLL? Je suppose que je pense toujours que la question intéressante est de savoir si ou non vous pouvez obtenir le programme de base pour exécuter des méthodes qui ne font pas partie de IStreamable. Est-il un mécanisme de concours complet, il fournit, peut-être?
InformationsquelleAutor Voreno | 2014-03-19