修改数据后从派生 class 调用基 class 的构造函数
calling the constructor of a base class from a derived class after modifying data
首先,如果有人问过这个问题,我很抱歉,但我一直在谷歌搜索,但没有找到任何解决方案。我在想,也许我只是不知道如何正确地表达问题。
public class WeatherEngine : ParticleEngine
{
public enum WeatherType
{
None,
Rain,
Snow
}
public WeatherEngine(List<Texture2D> weatherTextures, WeatherType weatherType) : base(weatherTextures, null)
{}
我目前正在尝试从我的粒子引擎中获取我的天气 class,但我很难弄清楚是否有办法在将某些数据传递到基础之前对其进行修改 class构造函数。
理想情况下,我希望能够为每种天气类型传递可能的天气纹理的完整列表,然后将该列表分成另一个列表 List<Texture2D> currentWeatherTextures
以传递到基本构造函数中。
AFAIK,我唯一的其他选择是在调用 WeatherEngine 的构造函数之前分离列表,但本着保持我的主要 class 大部分逻辑清晰而只是使用它来初始化所有内容的精神,我希望有替代解决方案。
或者我应该根本不从 ParticleEngine 派生 WeatherEngine,而是将两者分开?
您可以在派生的 class 中创建一个私有静态方法来修改数据和 returns 传递给基础 class 构造函数的值:
using System;
namespace ConsoleApp2
{
public class Base
{
public Base(string param)
{
Console.WriteLine("Param: " + param);
}
}
public class Derived : Base
{
public Derived(string param) : base(Modify(param))
{
}
static string Modify(string s)
{
return "Modified: " + s;
}
}
class Program
{
static void Main()
{
Derived d = new Derived("Test");
}
}
}
首先,如果有人问过这个问题,我很抱歉,但我一直在谷歌搜索,但没有找到任何解决方案。我在想,也许我只是不知道如何正确地表达问题。
public class WeatherEngine : ParticleEngine
{
public enum WeatherType
{
None,
Rain,
Snow
}
public WeatherEngine(List<Texture2D> weatherTextures, WeatherType weatherType) : base(weatherTextures, null)
{}
我目前正在尝试从我的粒子引擎中获取我的天气 class,但我很难弄清楚是否有办法在将某些数据传递到基础之前对其进行修改 class构造函数。
理想情况下,我希望能够为每种天气类型传递可能的天气纹理的完整列表,然后将该列表分成另一个列表 List<Texture2D> currentWeatherTextures
以传递到基本构造函数中。
AFAIK,我唯一的其他选择是在调用 WeatherEngine 的构造函数之前分离列表,但本着保持我的主要 class 大部分逻辑清晰而只是使用它来初始化所有内容的精神,我希望有替代解决方案。
或者我应该根本不从 ParticleEngine 派生 WeatherEngine,而是将两者分开?
您可以在派生的 class 中创建一个私有静态方法来修改数据和 returns 传递给基础 class 构造函数的值:
using System;
namespace ConsoleApp2
{
public class Base
{
public Base(string param)
{
Console.WriteLine("Param: " + param);
}
}
public class Derived : Base
{
public Derived(string param) : base(Modify(param))
{
}
static string Modify(string s)
{
return "Modified: " + s;
}
}
class Program
{
static void Main()
{
Derived d = new Derived("Test");
}
}
}