将非静态类扩展为静态

时间:2014-03-14 19:27:23

标签: c# static extends

我经常使用具有引用应用程序的非静态类的自动化库。在一个项目中,可以有几十个类,每个类都有自己对该应用程序的引用。在过去,我只是简单地创建了一个静态类,引用了应用程序,所有类都可以指向:

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直接)。我完全在这里的梦想之地吗?如果不可能的话,它不会成为世界的终点,但拥有这种能力会很棒。

1 个答案:

答案 0 :(得分:1)

你不能以你想要的方式继承。
How can a static class derive from an object?

但是你可以将非静态函数调用包装到SomeAppHelper

上的静态函数中

因此,对于要在静态类上使用的每个函数,您必须执行此操作

public static ReturnObject FunctionName(Parameters p)
{
    return _app.FunctionName(p);
}

在调用这些静态方法之前,请确保初始化_app