基础 class 加载的内容是否在派生 class 中重复?

Is base class loaded content duplicated in the derived class?

基础 class 加载的内容是否在派生 class 中重复?

我有一个基础 class 'GameScreen' 和许多派生的 classes('TitleScreen'、'PlayerSetupScreen'、'GameplayScreen' 等) .如果我在基础 class 'GameScreen' 中加载图形内容(所有屏幕通用),该内容是否会在每个派生屏幕的 RAM 中复制,还是一次性加载并简单引用?我假设是后者,但我只需要确定一下,因为我打算通过这种方式加载更多内容。任何帮助将不胜感激。

我正在用 C# Monogame 编码,使用 Visual Studio。

如果您发布一些代码显示您所做的事情,您的问题会更清楚,但我想我明白了,所以我会为您做。我假设你有这样的东西:

public abstract class GameScreen
{
    protected Texture2D Texture { get; set; }
}

public class TitleScreen : GameScreen
{
}

public class GameplayScreen : GameScreen
{
}

在你代码的其他地方你正在做这样的事情:

var titleScreen = new TitleScreen { Texture = Content.Load<Texture2D>("something") };
var gameplayScreen = new GameplayScreen { Texture = Content.Load<Texture2D>("something") };

简单地说,在此代码中,MonoGame 将只加载一次 "something" 纹理并将其缓存在 ContentManager 中。第二次加载相同内容时,ContentManager 将 return 引用同一内容实例。

这实际上意味着每个 "screen" 将只携带一个指向它关心的内容的引用指针。这不会占用太多内存,所以不用担心。

可能会占用大量 RAM 的是多次调用 Content.Load 以加载 不同 内容。 ContentManager 不会卸载此内容,直到它被显式处置或卸载,即使没有任何内容引用它也是如此。

也就是说,在您的游戏变得更大之前,您不太可能需要担心这些问题。在事情成为真正的问题之前,不要把事情复杂化。如果您开始注意到问题,您以后可以随时重构您的代码。