-2

我有以下问题:

有一个引擎调用 SuperClass 的静态方法(我们将其称为 SuperClass.StaticMethod)。我无法访问引擎的代码,但我可以反思一下。

我对 SuperClass 进行了子类化(生成 SubClass),并且能够通过反射编辑从 SuperClass 继承的私有字段。到目前为止一切正常。

引擎有一个类(我们称之为常量),它有很多类的静态最终实例,包括超类,但不是我的子类,因为它不是引擎的一部分。

现在, SuperClass.StaticMethod 的作用与此等效:

public int StaticMethod(int i)
{
    if(i == 0)
        return Constants.SuperClassInstance.Field_1;
    else if(i == 1)
        return Constants.SuperClassInstance.Field_2;
}

SuperClass.Field_1 和 SuperClass.Field_2 都是私有的(它们不是静态的,人们认为它们是静态的,所以我正在稍微编辑问题),但是静态方法可以看到它们,因为它是 SuperClass 的成员。正如我所说,我能够通过反射在继承的子类上设置这些字段的值,但是由于 SupperClass.StaticMethod 的工作方式,如上所示,这对其没有影响。

我不认为我可以更改 SuperClassInstance.Field_1 和 Field_2,否则我会稍微但明智地打破 SuperClass 的工作方式。

有没有办法解决这个问题?

4

1 回答 1

0

在我看来,这似乎是一个 XY 问题。那是您的大部分问题都与设计有关。

一方面,拥有私有静态决赛的目的是什么?既然它是最终的,它也可能是公开的。这是我经常看到的东西,但我认为这通常是一种不好的做法。

使某些东西成为静态的,本质上使它成为全球性的。在单例的情况下,希望隐藏静态变量的全局性。但是,通常有一些辅助函数可以揭示这种“隐藏的、全局的”的有用功能。

听起来父类缺少那些使父类完全有用的方法。有没有一种方法可以改变父类的设计,而不是利用所有这些技巧来使您的项目工作?

于 2013-08-19T20:14:26.930 回答