【发布时间】:2018-02-09 20:46:14
【问题描述】:
我有一个名为 BaseWeather 的基类,每个天气状态都派生自这个基类
现在BaseWeather 包含public ParticleSystem _ParticleSystem; 因为大多数天气状态可以有1个或多个粒子系统(Thunderstorm->Rain->Lighting->Tornado)
现在,当谈到晴天的天气状态时,没有粒子系统,因为“晴天”是由光和雾处理的,所以在我的派生类 Sunny 中,我这样做是为了纠正这样一个事实:是一个零粒子系统
try{
base.ResetEmission();
}catch{
if (WeatherSystem.Instance._debugState == DebugLevel.Full) {
Debug.LogWarning ("Particle System is null at Sunny.cs line 47");
}
}
我的逻辑是使用 try 块并发现 ResetEmission() dosent 工作它只会假定它的 null 调试警告并且它不会影响游戏玩法
我的问题是处理这种情况的“正确”方法是什么
【问题讨论】:
-
你的设计违反了里氏替换原则。如果 SunnyWeather 类没有粒子系统,则粒子系统属性不应位于 BaseWeather 类中。考虑创建另一个继承自 BaseWeather 的类,称为 ParticleWeather 或类似的东西。然后您的具有粒子系统的类从该类继承(继而继承 BaseWeather)。
-
除了我的回答之外,我建议不要将异常用作逻辑的一部分。应该为真正的异常情况(磁盘空间不足、没有网络、缺少数据库等)保留异常,而不是合理预期的情况。即使在
base.ResetEmission中进行简单的空检查也会更好。 -
您是否考虑过简单地添加一个
if(ParticleSystem == null) return;?