gpt4 book ai didi

c# - 如何在运行时替换静态类

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:31 25 4
gpt4 key购买 nike

我知道您不能覆盖或继承静态类,为什么。这很清楚。

我正在寻找一些关于如何用我自己的静态类替换该静态类的建议。请进行任何骇人听闻或最疯狂的尝试。

我基本上是在为游戏编写 MOD,而游戏编写者特别编写一个类的方式是,他将其设置为静态并将实现放在那里。所以当我们用这个东西写我们自己的 DLL 时,对像素网格执行计算的唯一方法是当他的代码在他的静态类中调用这个特定的计算时。这两个类都是静态的,但我只需要更改一个。

这对他来说很棒,但我想让我的东西再做一次计算,让它变得更棒。我使用了ILspy,可以看到基础游戏静态类中的所有代码,所以我可以复制粘贴它,只需要修改两三行。

但现在我想核对游戏核心静态类并使我的成为唯一的实现。

我想在运行时强制替换静态类,在静态类被调用之前和加载我的 mod 之后,怎么做?必须有一种方法来交换静态类吗?

我读到过有关创建代理 DLL 的信息,该代理 DLL 将所有方法重定向到旧 DLL,并将我的方法重定向到我的 DLL,但这需要游戏玩家替换核心游戏 DLL,这比仅仅告诉人们我的模组是什么更肮脏做。我正在更改此 mod 的实现,如果您不喜欢,请不要使用我的 mod。这样比较合理。

最佳答案

我假设您无权访问源代码,因此无法直接修改它。

您可以(可能不应该)使用 Microsoft fakes,因为它主要用于测试。您可以根据原作者的 dll 创建一个假程序集,然后只覆盖您想要的类型。它甚至支持覆盖静态类。再次声明,我并不是说您一定应该这样做,但您可以这样做。
这是用于隔离被测代码的页面,它包括一个填充静态类 (DateTime) 的示例 https://msdn.microsoft.com/en-us/library/hh549175.aspx

关于c# - 如何在运行时替换静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39517298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com