2012-03-20 4 views
0

J'écris un wrapper dans C# autour du code non managé. Le code non géré crée une session et la session peut être dynamique ou statique en fonction de deux appels de méthode. Dynamique et statique contient différents types d'où je ne peux pas utiliser une interface ici. Si CreateDynamic est appelé, alors c'est dynamique sinon c'est statique.conception de classe pour wrapper autour du code non managé

Ma conception de classe initiale ressemble à ceci.

public class Session 
{ 
    public void CreateDynamic() 
    { 
     dynamic = new Dynamic(); 
    } 

    public void CreateStatic() 
    { 
     stat = new Static(); 
    } 

    public Dynamic dynamic; 
    public Static stat; 
} 

Une fois que je crée une session, l'objet doit contenir des méthodes et des propriétés qui sont applicables à la session créée. L'accès à la sous-session non instanciée entraînera une exception de référence nulle. Est-il possible de contourner ce problème?

+0

Définissez ces champs * private * pour les démarreurs. Pensez * classe de base abstraite * suivant. –

+0

@ HansPassant-Pouvez-vous expliquer en détail? – sundar

Répondre

0

Vous pouvez créer deux classes de session différentes et utiliser une classe statique pour créer la session appropriée. Par exemple:

interface ISession 
{ 
    // Common methods 
} 

interface IDynamicSession : ISession 
{ 
    // Methods unique to a dynamic session 
} 

interface IStaticSession : ISession 
{ 
    // Methods unique to a static session 
} 

public class DynamicSession : IDynamicSession 
{ 
} 

public class StaticSession : IStaticSession 
{ 
} 

public static class Session 
{ 
    public IDynamicSession CreateDynamic() 
    { 
     return new DynamicSession(); 
    } 

    public IStaticSession CreateStatic() 
    { 
     return new StaticSession(); 
    } 
} 
+0

Cela ne résout pas le problème dont je parle. – sundar

Questions connexes