将信息传递给函数的最佳方法

时间:2017-01-12 07:59:46

标签: c#

将信息传递给函数的最佳方法是什么?我们应该传递参数列表吗?或者我们应该创建一个类并只传递该类的实例,这样,无论何时,参数列表中的更改我们都不必更改所有流程?

传递类变量:

public class FooParams
{
    string Name{get;set;}
    string Password{get;set;}
}

public void GetFoo(Foo foo)
{
}

传递参数列表

public void GetFoo(string name, string password)
{
}

3 个答案:

答案 0 :(得分:2)

这里有很多事情需要考虑 这取决于上下文,有多少参数,可读性,不变性,甚至个人偏好

以下几个案例需要考虑:

  • 如果您传递的只是简单的stringint参数,那么也许您应该像void foo (string s, int i)

    <那样传递它们/ LI>
  • 如果你需要对这些值进行可变性,那么你可以将它们包装在一个类中并传入它。

  • 如果这些参数总是在一起,那么考虑将它们包装在类或结构中:

    void foo(int height, int width)
    void foo(Size size)
    
  • 如果有许多不同的参数,您可以考虑将它们包装在DTO或DTO中并传递它以提高可读性。例如:

    void SendTo (string firstName, string LastName, string street, int apartmentNumber, string City)
    void SendTo (Person person, Address address)
    

答案 1 :(得分:0)

IMO,传递一个参数列表是您的理由,有时您希望生成编译时错误,而不是在添加内容时搜索所有用法。

如果您有大量参数,那么您可以创建struct以按值复制(不需要类 - 引用类型)。

作为FooParams的替代方案,您所看到的是可选参数:

public void GetFoo(string name, string password, int somethingNew = 0)
{
}

通过使用可选参数,您可以实际指定必需的内容以及此功能的可选内容。例如,经常使用这种方法而不是实现和维护六个重载。

答案 2 :(得分:0)

除非您希望在其他位置使用该参数对象,否则您不应仅为了将参数捆绑到单个对象中而创建类/结构。在您的示例中,如果它仅适用于单个方法,那么在设计和性能方面使用参数将是最简单的:

public void GetFoo(string name, string password)
{
    /// Do stuff
}

但是,如果这是可以互相操作的方法库的一部分,那么您可以考虑将结构作为信息持有者。 (简而言之,这就是Point命名空间中System.Drawing结构的目的。)

(我应该指出,虽然在程序执行速度更快,占用内存更少的意义上,使用参数而不是类/结构的真实性更好,但实际上差异完全可以忽略不计。但设计方面仍然是一个有效的问题。)