繁体   English   中英

将非静态类扩展为静态

[英]Extend Non-Static Class as Static

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

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#的任何人都可以准确地告诉您使用编译器进行处理的情况。

确实,我对使用的方法并没有那么在意,而只关注结果(拥有一个静态类,开发人员可以通过SomeAppHelper直接访问SomeApp.coApplication() SomeAppHelper函数)。 我完全在这里做梦吗? 如果不可能的话,这不会是世界末日,但是拥有这种能力将是很棒的。

您无法以您想要的方式继承。
静态类如何从对象派生?

但是您可以将非静态函数调用包装到SomeAppHelper上的静态函数中

因此,对于要在静态类中提供的每个函数,您都必须执行此操作

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

只需确保在调用这些静态方法之前已初始化_app

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM