何时应该传递参数给对象的构造函数?您使用哪些标准将它们传递给构造函数而不是对象方法中的参数?OOP对象构造函数参数
回答
通常,在使用new
关键字实例化类时,将参数传递给类构造函数(这可能因语言而异)。
例如(选择了对C /的Java/C#风格在这里)
MyClass class = new MyClass(arg1, arg2, arg3);
在重新阅读你的问题,我倾向于使用构造函数的参数为绝对需要的资源。这样,你就知道你的对象必须有某些可用的属性或资源。
基本上你想要在构造器中初始化对象的所有基本构建块。 但有时,该对象包含许多元素,从而使构造函数的参数列表太长。 我遵循以下指导原则:如果构造函数的参数列表多于5个元素,则将新对象的初始化分为构造函数参数&设置方法。
将事情传递给构造函数,它们是对象的不可变属性。如果可能,请使所有对象属性不可变。充分考虑到这一点,这可以使整个对象不可变。
在构造时分配的不可变属性避免了各种竞争条件(特别是在多线程环境中),并有助于确保对象始终一致,从而消除了多种错误的可能性。通过强制在构建时定义属性,可以避免大量的错误检查代码。一旦整个对象不可变,就有机会共享等价对象,提高内存性能。
如果一个参数不是对象的不可变属性,那么在构造函数中指定它只是一个方便。一般来说,它应该被赋予一个setter来减少代码的复杂性(因为无论如何setter都是必需的)。如果构造函数经常被调用,那么参数的方便可能值得这个额外的复杂性。
不可变?像数据库连接到模型对象?谢谢。 – thom
不可变意味着对象不能以呼叫者可见的方式改变。如果我要求一个不变的字符串作为其第三个字符,那么这将是字符串整个生命周期的第三个字符。可变字符串是可以随时间变化的字符串。诸如缓存之类的内部数据结构不是可变性的一部分,因此它并不意味着对象的文字内存不会改变。但是从外部世界来看,对于同样的问题你总能得到同样的答案。 http://en.wikipedia.org/wiki/Immutable_object –
- 1. 构造函数中的对象参数
- 2. php oop构造函数
- 3. 函数对象和构造
- 4. 无参数构造函数调用2参数构造函数
- 5. 没有参数的构造函数或参数构造函数
- 6. 抽象参数构造函数
- 7. 重构用于新对象的构造函数参数?
- 8. oop行为类似构造函数参数类型的类
- 9. 构造函数的参数是对象的数组
- 10. 对象构造函数的C++数组
- 11. 静态类C#构造函数OOP
- 12. C++ OOP类和构造函数
- 13. swiftsuspenders构造函数参数?
- 14. 无参数构造函数
- 15. 构造函数的参数
- 16. 参数类构造函数
- 17. 从构造函数参数
- 18. LinearGradientBrush构造函数参数
- 19. ConcurrentHashMap构造函数参数?
- 20. 无参数构造函数
- 21. StructureMap构造函数参数
- 22. 使用可变对象作为构造函数参数
- 23. 对象无参数的构造函数为
- 24. 如何使用MOQ对象测试Ninject构造函数参数?
- 25. ODP净甲骨文参数的构造函数与Boolean对象
- 26. 没有为此对象定义的无参数构造函数?
- 27. Umbraco为此对象定义的无参数构造函数
- 28. 使用对象没有构造函数参数的JAVA
- 29. 没有为此对象定义的无参数构造函数
- 30. javascript:将参数传递给对象构造函数
“...需要的资源......”我想过但不知道:) – thom