非托管代码包装器的类设计
本文关键字:包装 非托管代码 | 更新日期: 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();
}
}