2012-03-20 2 views
0

Я пишу обертку в C# вокруг неуправляемого кода. Неуправляемый код создает сеанс, и сеанс может быть динамическим или статическим, основанным на двух вызовах метода.класс дизайн для обертки вокруг неуправляемого кода

динамический и статический содержит различные типы, поэтому я не могу использовать интерфейс здесь.

Если вызывается CreateDynamic, то он является динамическим иначе он статичен.

Мой первоначальный класс выглядит так.

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

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

    public Dynamic dynamic; 
    public Static stat; 
} 

Как только я создаю сеанс, объект должен содержать методы и свойства, которые применимы к созданному сеансу. Доступ к необоснованному вспомогательному сеансу приведет к исключению нулевой ссылки. Есть ли способ обойти эту проблему?

+0

Сделать эти поля * частными * для начала. Подумайте * абстрактный базовый класс * следующий. –

+0

@ HansPassant-Можете ли вы объяснить подробно? – sundar

ответ

0

Вы можете создать два разных класса сеанса и использовать статический класс для создания соответствующего сеанса. Например:

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

Это не решает проблему, о которой я говорю. – sundar

Смежные вопросы