我经常使用具有引用应用程序的非静态类的自动化库。在一个项目中,可以有几十个类,每个类都有自己对该应用程序的引用。在过去,我只是简单地创建了一个静态类,引用了应用程序,所有类都可以指向:
public static class SomeAppHelper
{
private static IApplication _app = null;
public static IApplication app
{
get
{
if (_app == null)
{
_app = new SomeApp.coApplication();
}
return _app;
}
set { _app = value; }
}
}
我还在课程中添加了有用的功能,这些功能有助于将自动化的限制扩展到我的需求。到目前为止,这一切都很顺利,但我发现自己想要更进一步。 我希望SomeAppHelper
扩展SomeApp.coApplication
,以便我的DLL用户可以访问我的班级和原始版本的简单SomeAppHelper.functionName()
。另外,我非常希望保持类静态,以便使用它的每个类都不必实例化它。
我已经搞乱了基本的扩展语法(public static class SomeAppHelper : SomeApp.coApplication
),但因为coApplication
从未实例化,所以它没有成员。
我还想到尝试将this
设置为以与我原来的方法类似的方式返回SomeApp.coApplication()
的属性:
public static class SomeAppHelper
{
private static IApplication _app = null;
public static IApplication this
{
get
{
if (_app == null)
{
_app = new SomeApp.coApplication();
}
return _app;
}
set { _app = value; }
}
}
我确定任何曾经尝试使用C#的人都可以告诉你这个编译器到底有多好。
真的,我并不关心我使用的方法,而是关注结果(有一个单独的静态类,开发人员可以通过该类访问SomeApp.coApplication()
中的函数和 SomeAppHelper
直接)。我完全在这里的梦想之地吗?如果不可能的话,它不会成为世界的终点,但拥有这种能力会很棒。
答案 0 :(得分:1)
你不能以你想要的方式继承。
How can a static class derive from an object?
但是你可以将非静态函数调用包装到SomeAppHelper
因此,对于要在静态类上使用的每个函数,您必须执行此操作
public static ReturnObject FunctionName(Parameters p)
{
return _app.FunctionName(p);
}
在调用这些静态方法之前,请确保初始化_app
。