首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在派生类c#单位中处理空对象

在派生类c#单位中处理空对象
EN

Stack Overflow用户
提问于 2018-02-04 04:56:01
回答 1查看 109关注 0票数 0

我有一个名为BaseWeather的基类,每个天气状态都来自这个基类。

现在BaseWeather包含了public ParticleSystem _ParticleSystem;,因为大多数天气状态都可以有一个或多个粒子public ParticleSystem _ParticleSystem;

现在,当谈到天气的阳光状态时,没有粒子系统,因为“阳光度”是由光和雾处理的,所以在我的派生类Sunny中,我这样做是为了弥补这样一个事实,即会有一个零粒子系统。

代码语言:javascript
复制
try{
            base.ResetEmission();
        }catch{
            if (WeatherSystem.Instance._debugState == DebugLevel.Full) {
                Debug.LogWarning ("Particle System is null at Sunny.cs line 47");
            }
        }

这里我的逻辑是使用一个try块并发现ResetEmission()剂量工作,它只是假设它的空调试警告,它不会影响游戏播放。

我的问题是,如何“正确”地处理这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-05 13:45:52

“正确”的办法是:

  1. 创建另一个基类,例如BaseWeatherWithParticleSystem,只有当您确实提供了粒子系统时,才会继承它
  2. 创建一个接口,例如IWeatherParticleSystem,并为需要粒子系统的类实现它。

我倾向于采用界面方法。它使测试更容易,更清楚地宣传了类的功能。请注意,您可以实现这两种方法,例如:

代码语言:javascript
复制
public class BaseWeather { ... }
public class BaseWeatherWithParticleSystem : BaseWeather, IWeatherParticleSystem { ... }

至于将接口应用于基类或派生类,这取决于IDE为从类引用中轻松发现实现的接口提供的支持级别。

只是要小心,不要试图通过继承和基类来处理太多问题。很容易将自己安排到一个角落,试图使所有东西都符合继承层次结构。我发现您通常更好的做法是直接实现一些东西,然后在基本设置好之后重构公共代码。

正如@maccettura在他们的评论中所指出的,“正确”的方式是为了避免违反实心原则。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48604844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档