非托管代码包装器的类设计

本文关键字:包装 非托管代码 | 更新日期: 2023-09-27 18:28:24

Am在c#中围绕非托管代码编写包装器。非托管代码创建一个会话,会话可以是动态的,也可以是基于两个方法调用的静态的。

动态和静态包含不同的类型,因此我不能在这里使用接口。

如果调用CreateDynamic,则它是动态的否则它是静态的。

我最初的课堂设计是这样的。

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

创建会话后,对象应该包含适用于创建的会话的方法和属性。访问未实例化的子会话将导致null引用异常。有什么办法绕过这个问题吗?

非托管代码包装器的类设计

您可以创建两个不同的会话类,并使用一个静态类来创建适当的会话。例如:

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();
    }
}