使用整个类作为参数 - 良好实践?

444*_*444 5 c# parameters class

假设一个名为"Place"的类存储位置和相关细节:

class Place
{
    string Name;
    string Location;
    // etc...
}
Run Code Online (Sandbox Code Playgroud)

稍后我们将填写多达80个不同城镇的名称和详细信息.所以我们将这些城镇以数字方式存储在一个数组中:

class Setup
{
    public static GetTowns
    {
        for (int i = 1; i <= numberOfTowns; i++)
        {
            Town[i] = new Place(name, location);
        }
        // more code...
    }
    // more methods...
}
Run Code Online (Sandbox Code Playgroud)

要访问特定城镇及其数据,我们将城镇本身作为参数传递并接收:

public static void DescribeTown(Place Town)
{
    // example method from some other class
    Console.WriteLine("Shipping to {0}.", Town.Name);
}
Run Code Online (Sandbox Code Playgroud)

其他方法需要访问多个城镇或所有城镇.然后我们可以将整个Town数组作为参数传递:

public static void ListAllTowns(Place[] Town)
{
    Console.WriteLine("Our Beloved Clients:");
    foreach (Place here in Town)
    {
        Console.WriteLine("{0} in {1}", here.Name, here.Location);
        // Various other operations requiring info about the Towns
    }
}
Run Code Online (Sandbox Code Playgroud)

完整参考,C#2.0,陈述如下

参数是接收调用时传递给方法的参数值的变量.

这似乎表明每个类的实例以及所涉及的所有数据都会在ListAllTowns每次调用时传递.这对我来说听起来很浪费,但是呢?

(出于概念验证的原因,此示例大大简化,但方法需要读/写权限以及多个城镇之间的比较.)

Jus*_*ner 7

没有什么可以浪费的.您没有传递所有项目的副本,您只是创建一个数组,然后将对该数组的引用传递给该ListAllTowns方法(数组是引用类型).

你正在以正确的方式做事(其中之一).


小智 2

默认情况下,C# 中的所有类都是引用,因此只有一个指针被发送到函数。

回答你的问题:这取决于。有时,将整个对象作为参数发送实际上确实有意义(即我们正在尝试使用对象进行某些操作)。另一方面,仅为函数参数创建类可能不太好。在您的特定示例中,创建一个类确实有意义。

我刚才所说的一个例外是:结构体作为副本发送(所有成员都将被复制)。将这些作为函数参数发送时必须小心。