Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 构造函数还是属性:在赋值时,哪一个是更好的选择_C#_Properties_Constructor - Fatal编程技术网

C# 构造函数还是属性:在赋值时,哪一个是更好的选择

C# 构造函数还是属性:在赋值时,哪一个是更好的选择,c#,properties,constructor,C#,Properties,Constructor,当我们在赋值时应该在属性上使用构造函数,反之亦然。当您需要任意合理的初始值时,可以使用构造函数;当您希望以后可以更改值时,可以使用属性。如果要构造对象确实需要参数值,则可以使用构造函数(没有它们,对象无法开始活动)。对具有可接受默认值的参数使用属性,因此完全不分配它们是可以的。您可以提供一些额外的构造函数,这些构造函数将分配一些属性作为简写,以方便您的用户。构造函数是一种非常方便且功能强大的合同类型-一种要求用户提供特定属性的方法因此,对于实例正常运行所需的信息,请使用构造函数参数。这是依赖项注

当我们在赋值时应该在属性上使用构造函数,反之亦然。

当您需要任意合理的初始值时,可以使用构造函数;当您希望以后可以更改值时,可以使用属性。

如果要构造对象确实需要参数值,则可以使用构造函数(没有它们,对象无法开始活动)。对具有可接受默认值的参数使用属性,因此完全不分配它们是可以的。您可以提供一些额外的构造函数,这些构造函数将分配一些属性作为简写,以方便您的用户。

构造函数是一种非常方便且功能强大的合同类型-一种要求用户提供特定属性的方法因此,对于实例正常运行所需的信息,请使用构造函数参数。这是依赖项注入的基本概念-在开始之前,必须向您注入(提供)您工作所依赖的任何内容


属性可能代表一个有趣的问题。一般来说,经验告诉我,只要可能,属性应该是只读的,对象通常应该尽可能在外部保持不变。为属性添加公共setter会增加类的复杂性。当然,对象类型总是有-entities是一个很好的例子,其中setter是有意义的。但对于大多数对象,state的“write to via constructor”/“read from via properties”模式大大降低了我负责的应用程序的复杂性和bug风险。

在一些情况下,可变属性可能更可取:

  • 对于“纯”可变数据对象,仅设置属性不会产生任何副作用。例如,您可能有一个表示数据库中某个实体的对象,但在显式执行提交操作之前,修改其属性不会产生任何效果。该对象是一个包含数据的包,但不包含任何数据直接响应数据中的更改

  • 如果有大量可配置状态会影响某些操作,并且许多可配置属性具有有意义的默认值。如果这些属性是执行该操作的类的属性,则通常会有一些“冻结”状态的概念,以便在操作正在运行

  • 如果您正在开发一个类,该类将由依赖属性反射的可视化设计器或其他系统使用。例如,WPF中的数据绑定系统广泛使用可变属性作为沟通UI交互的方式。通过适当的设计来管理这些变化,您可以创建一些非常强大的和响应接口


  • 我猜你的意思是分配初始值…@drachenstern-谢谢你的建议link@user498432~z~如果这是你需要的,请告诉我,我会把它作为一个答案,这样你就可以接受其他人提出的同样问题。我总是喜欢属性,如果你的对象不需要任意初始值,也就是说它有理智,那好吗当然,构造函数方法本身中的值。