c# - 带参数的 void 方法和不带参数的返回值方法?

标签 c# object methods

<分区>

我正在用 C# 开发软件,我记得我读过一篇文章,其中包含以下声明:

像这样设计一个类的方法:

  • 使用 void 方法带参数 来改变类实例的状态。方法会对类的数据做一些改变
  • 返回值不带任何参数的方法一起使用,以便从类中检索数据

我找不到这篇文章了,我想知道这种约定的优点和缺点,以提高我正在编写的代码的质量和可维护性。

我的问题是:你知道这个问题的任何引用资料/文章吗?遵循这些陈述是否有意义?

最佳答案

C# 有 properties我认为这使这些建议不太实用。最重要的一点是类内部的数据应该被封装(外部世界不能直接访问它)和抽象(隐藏细节)。这是类的主要目的之一。出于这个原因,我认为这个建议对于像 C++ 这样没有属性的语言更有意义。

但其中一个问题是,人们会编写一个带有私有(private)字段的类,然后必须为每个私有(private)字段编写一个 getter 方法和一个 setter 方法,这会导致冗余样板代码。属性有助于简化此策略,同时仍保持封装和抽象。例如,

UserInfo user = new UserInfo();
user.Username = "foo";
Console.WriteLine(user.Password);

在上面的示例中,我将用户名设置为 foo 并检索了用户的密码。我究竟如何设置和检索信息是隐藏的。它现在可能保存在 .xml 文件中,但后来我决定更改为将其保存在数据库中或直接保存在内存中。使用此类的外部世界永远不会更聪明。这是 OOP 的众多优点之一。

您问题中的两个项目符号可以响应属性的 getter 和 setter。如果我想在没有任何参数的情况下从我的类中检索数据,那么拥有一个属性更有意义。同样,如果我想更改对象的状态,我可以使用 setter 属性。我可以对输入执行验证,使其成为线程安全的,添加日志记录,以及我可以使用采用单个参数的方法所做的一切。

关于c# - 带参数的 void 方法和不带参数的返回值方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16560132/

相关文章:

c# - 创建 FileTable 或 FileStream SQL 类型 在 C# 中使用 Stream

c# - MVC WebApi 端点不适用于生产环境,但常规端点可以

mongodb - 带有嵌套对象的 Mongoose 聚合 $group

java - 需要更改数组中的每个元素,但仅更改索引java

visual-studio - Visual Studio "Go to implementation "

javascript - crypto-js 如何隐藏类方法?

c# - 将数据存储在 C# 源文件与 XML 等...?

c# - 如何在数据访问层 (C#) 中表示空值

javascript - 从复杂的json结构中获取最后一个子节点并仅在javascript中重构最后一个节点

javascript - ng-repeat 中的 orderBy