关于c#:将非静态类扩展为静态

 2020-02-15 

Extend Non-Static Class as Static

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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()的属性的想法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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中的函数)。我完全在这里做梦吗?如果不可能的话,这不会是世界末日,但是拥有这种能力将是很棒的。


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

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

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

1
2
3
4
public static ReturnObject FunctionName(Parameters p)
{
    return _app.FunctionName(p);
}

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