C#原始类型或复杂类型作为方法签名?

使用Primitve类型或复杂类型有哪些优缺点?

什么时候应该使用复杂类型的原始类型,反之亦然?

即:

public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public int IQ { get; set; } } public void FooPrimitiveTypes (string firstName, string lastName, int age, int IQ) { } public void FooComplexTypes(Person person) { } 

  1. 通常在处理不相交的值时使用单独传递每个属性。 此外,有时用于构造函数。 不好的做法。

  2. 当值相关时,这种方式是首选。

为什么#1是一个不好的做法 – 假设您需要增加height 。 我宁愿通过添加另一个属性而不是50个方法来更新一个类。

Foo在概念上处理一个人吗? 是否所有(或至少大多数)人都被Foo使用,或者它只是使用恰好是人的一些信息? Foo可能会处理不是人的事情吗? 如果Foo是InsertPersonIntoDB(),那么最好处理Person。

如果Foo是PrintName(),那么也许PrintName(字符串FirstName,字符串LastName)更合适(或者,您可以改为定义一个Name类,并说一个人有一个Name)。

如果你发现自己创建了一半初始化的临时Person对象只是为了传递给Foo,那么你可能想要分解参数。

需要注意的是,当您使用基元时,它们将通过值传递…对象引用也通过值传递,但由于对值的所有基础引用都是引用,因此它实际上是通过引用传递的。 因此,根据您正在做的事情,这个传递值或通过引用传递可能是重要的。 同样在第一种情况下,对基元的修改不会影响调用范围中变量的值,但是修改传入的对象将影响调用范围中的对象。