C# 基类加载的内容是否在派生类中重复?

C# 基类加载的内容是否在派生类中重复?,c#,loading,monogame,derived-class,base-class,C#,Loading,Monogame,Derived Class,Base Class,基类加载的内容是否在派生类中重复? 我有一个基类“GameScreen”和许多派生类(“TitleScreen”、“PlayerSetupScreen”、“GameplayScreen”等)。如果我在基类“GameScreen”中加载图形内容(对所有屏幕都是通用的),该内容会在每个派生屏幕的RAM中复制,还是只加载一次并简单引用?我假设是后者,但我只需要确定一下,因为我打算以这种方式加载更多的内容。任何帮助都将不胜感激 我正在使用Visual Studio用C#Monogame编写代码。如果您发

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

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


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

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

var titleScreen = new TitleScreen { Texture = Content.Load<Texture2D>("something") };
var gameplayScreen = new GameplayScreen { Texture = Content.Load<Texture2D>("something") };
公共抽象类游戏屏幕
{
受保护的Texture2D纹理{get;set;}
}
公共类标题屏幕:游戏屏幕
{
}
公共类游戏屏幕:游戏屏幕
{
}
在代码的其他地方,您正在执行以下操作:

var titleScreen = new TitleScreen { Texture = Content.Load<Texture2D>("something") };
var gameplayScreen = new GameplayScreen { Texture = Content.Load<Texture2D>("something") };
var titleScreen=newtitlescreen{Texture=Content.Load(“某物”)};
var gameplayScreen=newgameplayscreen{Texture=Content.Load(“某物”)};
简单地说,在这段代码中,MonoGame只会加载“某物”纹理一次,并将其缓存在
ContentManager
中。第二次加载相同内容时,
ContentManager
将返回对相同内容实例的引用

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

占用大量内存的是调用
Content.Load
多次以加载不同的内容。
ContentManager
将不会卸载此内容,除非它被显式释放或卸载,即使没有任何内容包含对它的引用


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

实际上,这个问题太模糊了。但我觉得你两方面都错了。除非数据是静态的,否则类不会共享数据。如果在一个类中加载数据,另一个类在任何正常意义上都看不到它,除非你让它们都引用相同的数据,否则这实际上是OOP基础,在这里太宽泛了。基类只定义一个类型,子类从中派生其定义。它与共享数据或类似内容的类的实例无关。@seesharper确实如此<代码>公共类A{受保护对象A;}公共类B:A{}。域
a
是共享的。@CodingYoshi如果我有一个
Animal
类和一个
Giraffe
类派生自
Animal
,并且
Animal
有一些域X(参考类型,但不重要),那么确定,
Giraffe
s将有一个字段X。但是
Giraffe
s的实例不与
Animal
s的实例共享数据-显然除了
长颈鹿
作为
动物
的实例与自己“共享”数据之外。感谢您提供的信息反馈。知道重复的内容只通过引用是令人放心的。我决定在主游戏类中加载公共内容,以便它始终准备就绪。