【问题标题】:Different ways of passing object to method [duplicate]将对象传递给方法的不同方式[重复]
【发布时间】:2018-11-20 13:52:15
【问题描述】:

考虑以下代码sn-p:

public class Foo
{
   public int ID { get; set; }
   public string FirstName { get; set; }
   ...

   public Foo(int Id, string firstName)
   {
      ID = Id;
      FirstName = firstName;
   }
}

假设我们有一个将Foo 对象作为参数的方法。我可以按如下方式创建对象:

var first = new Foo { ID = 1, FirstName = "Test"};
var second = new Foo(1, "Test");

然后传递给接受对象作为参数的方法。我的实际类包含 10 多个属性,我为这个问题对其进行了简化。

我的问题是,这里有区别还是两者都做同样的事情?或者这更像是一种偏好。

提前感谢您的帮助。

【问题讨论】:

  • 您应该只将不可变值作为参数传递给构造函数或“在构造上必须具有有效值”值(在余下的生命周期中)。其余的都是可变属性。
  • 您实际上在问这两个对象初始化之间有什么区别......并且标题是关于将对象传递给方法。这是误导。改写你的问题会让你回答像here
  • 您实际上不能使用发布的类使用“第一个”初始化。 (因为它没有空的ctor)

标签: c#


【解决方案1】:

我认为这里最大的区别是你可以强制 Foo 的用户在实例化 Foo 时提供某些值,方法是创建一个接受这些参数的构造函数。 除此之外,这是偏好。

【讨论】:

  • 不是真的,因为能够做到这一点 var first = new Foo { ID = 1, FirstName = "Test"};这意味着已经有一个没有参数的构造函数,这意味着在实例化 Foo 时不会强制用户提供值
猜你喜欢
  • 2014-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2011-09-27
  • 2014-12-01
相关资源
最近更新 更多