我有一个名为BaseWeather的基类,每个天气状态都来自这个基类。
现在BaseWeather包含了public ParticleSystem _ParticleSystem;,因为大多数天气状态都可以有一个或多个粒子public ParticleSystem _ParticleSystem;。
现在,当谈到天气的阳光状态时,没有粒子系统,因为“阳光度”是由光和雾处理的,所以在我的派生类Sunny中,我这样做是为了弥补这样一个事实,即会有一个零粒子系统。
try{
base.ResetEmission();
}catch{
if (WeatherSystem.Instance._debugState == DebugLevel.Full) {
Debug.LogWarning ("Particle System is null at Sunny.cs line 47");
}
}这里我的逻辑是使用一个try块并发现ResetEmission()剂量工作,它只是假设它的空调试警告,它不会影响游戏播放。
我的问题是,如何“正确”地处理这种情况?
发布于 2018-02-05 13:45:52
“正确”的办法是:
BaseWeatherWithParticleSystem,只有当您确实提供了粒子系统时,才会继承它IWeatherParticleSystem,并为需要粒子系统的类实现它。我倾向于采用界面方法。它使测试更容易,更清楚地宣传了类的功能。请注意,您可以实现这两种方法,例如:
public class BaseWeather { ... }
public class BaseWeatherWithParticleSystem : BaseWeather, IWeatherParticleSystem { ... }至于将接口应用于基类或派生类,这取决于IDE为从类引用中轻松发现实现的接口提供的支持级别。
只是要小心,不要试图通过继承和基类来处理太多问题。很容易将自己安排到一个角落,试图使所有东西都符合继承层次结构。我发现您通常更好的做法是直接实现一些东西,然后在基本设置好之后重构公共代码。
正如@maccettura在他们的评论中所指出的,“正确”的方式是为了避免违反实心原则。
https://stackoverflow.com/questions/48604844
复制相似问题