【问题标题】:Instance of class created within parameter list of calling method?在调用方法的参数列表中创建的类实例?
【发布时间】:2014-11-25 01:14:51
【问题描述】:

我在将类的实例传递给函数时遇到问题,而没有事先对其进行初始化(这个库的设置方式,在创建类实例时,会触发事件,我最初不希望发生这种情况)。

TopClass TC = new TopClass();

并且可以从 AClass 类中访问 TC (dostuff) 的成员...

AClass myClass = TC.dostuff(parameters);

方法定义为:

public void MyMethod(Aclass myClass, bool value) {/* */} 

调用方法为

bool val = true; //or false, depending on what I need

MyMethod(AClass myclass = TC.dostuff(parameters), val);   // Is this really bad? 

在不触发事件的情况下,我无法在 MyMethod 中对其进行初始化,并且我无法将类实例作为 null 传递,这让我只能完成上述操作。至少通过这种方式,我可以在 MyMethod 中停止或启动所需的事件,具体取决于 bool 值。这里到底发生了什么? (除了可能不是好的 OOP 设计)。在这种情况下创建对 AClass 的引用会有所帮助吗?

【问题讨论】:

  • “这真的很糟糕吗?”好吧,它不会编译...
  • 我认为您需要在这里更具体地很多。你能展示一下事件吗?而 actual 类名...听起来您的对象在其构造函数中做得太多了。
  • 我不明白要求。什么构造函数/方法准确地触发事件?最后一行代码是什么?它无法编译。这是真正的问题吗?
  • 你太复杂了,按照 BWHazel 的建议去做。
  • 奇怪的是它确实可以编译。我删除了生成的文件并重建,结果相同(VS 2013)。我正在使用 IrrKlang 提供的库来进行声音处理。我真的是一个初学者,和其他一些人一样,关于如何传递他们的 ISound 类的实例也有问号。创建一个实例会触发声音本身:例如ISound 音乐 = engine.Play3D(filenamepath).

标签: c# oop


【解决方案1】:

MyMethod 调用中删除AClass myClass =

MyMethod(TC.dostuff(parameters), val);

这不会影响事件触发,但会将AClass 实例放入方法调用中。

【讨论】:

  • 谢谢 BWHazel - 这实际上是我的错字(我没有输入班级名称)。一般来说,我对在方法参数中以这种方式传递东西是否是不好的做法感兴趣
  • 嗨@Chaz - 不,在这样的情况下传递并没有皱眉;毕竟它的语言支持!但是,如果代码开始看起来不可读、难以管理或难以理解,那么最好先将实例作为命名对象获取,然后将其传入。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2012-12-19
  • 2013-12-02
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多