【发布时间】:2013-10-08 21:53:22
【问题描述】:
假设我有一个 Album 类:
public class Album
{
public string Name {get; set;}
public string Artist {get; set;}
public int Year {get; set;}
public Album()
{ }
public Album(string name, string artist, int year)
{
this.Name = name;
this.Artist = artist;
this.Year = year;
}
}
当我想将数据分配给Album 类型的对象时,接下来的两种方法有什么区别:
通过构造函数
var albumData = new Album("Albumius", "Artistus", 2013);
或实例化时
var albumData = new Album
{
Name = "Albumius",
Artist = "Artistus",
Year = 2013
};
【问题讨论】:
-
对于构造函数中的一个,您可以将值分配给私有成员变量,而使用对象初始化器,您只能使用公共属性
-
您的构造函数强制您传递姓名、艺术家和年份。它们对于您的对象启动器是可选的。
-
如果你的构造函数有一些逻辑来构造你的对象并且它需要一些参数来构造你的对象,那么对象初始化器可能不适合你的需要。但在“您显示的”情况下并没有什么不同。对象初始化器实际上是为 Linq 中的未命名对象完成的,因此可以创建原子对象。基本上,答案是,有时不一样,有时不一样。
-
如果你有
struct,直接赋值属性比调用构造函数快得多。确保你的结构是不可变的。
标签: c# oop constructor properties