初始化构造函数/对象的可能方式
本文关键字:方式 对象 构造函数 初始化 | 更新日期: 2023-09-27 18:29:32
我是OOP的初学者。昨天我试图阅读一些mvvm/wpf的例子,当然我遇到了麻烦。。。我对理解下面的一些代码有一些问题:
{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Addres { get; set; }
}
这只是普通人的课,没有什么特别的。问题是我无法理解以下代码:
private void SayHi_Click(object sender, RoutedEventArgs e)
{
Person person = new Person
{
FirstName=FirstName.Text,
LastName=LastName.Text,
Addres=Address.Text
};
我不明白的部分是:
Person person = new Person
{
FirstName=FirstName.Text,
LastName=LastName.Text,
Addres=Address.Text
};
我不确定这到底是什么。我认为每个新对象都应该像这样初始化:Class Class=new Class();。为什么"新人"后面没有()?我们有{},而不是()。我知道我们可以使用默认的、参数化的、静态的和私有的构造器。有人能给我解释一下吗?下面的CodeProject:教程中的类似情况
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial
我们有一个歌曲级
public class Song
{
#region Members
string _artistName;
string _songTitle;
#endregion
#region Properties
/// The artist name.
public string ArtistName
{
get { return _artistName; }
set { _artistName = value; }
}
/// The song title.
public string SongTitle
{
get { return _songTitle; }
set { _songTitle = value; }
}
#endregion
}
当然,我们有这个类的视图模型:
public class SongViewModel
{
Song _song;
public Song Song
{
get
{
return _song;
}
set
{
_song = value;
}
}
public string ArtistName
{
get { return Song.ArtistName; }
set { Song.ArtistName = value; }
}
}
再说一遍,这部分代码是我无法理解的:
public class SongViewModel
{
Song _song;
public Song Song
这首歌是什么?这是宋课的对象吗?而"宋颂"这一财产也更为珍贵。。。可能我缺乏知识
我不得不在这里留下一个新的答案,因为我看到两个人弄错了。初始值设定项语法:
Person person = new Person
{
FirstName = FirstName.Text,
LastName = LastName.Text,
Address = Address.Text
};
是否完全等同于创建一个新变量"person",然后分配属性。相反,它相当于创建一个临时变量,分配属性,然后将结果分配给"人":
Person person;
var temp = new Person();
temp.FirstName = FirstName.Text;
temp.LastName = LastName.Text;
temp.Address = Address.Text;
person = temp;
这种区别实际上可能非常重要,尤其是在视图模型中工作时。如果你想象你正在为一个属性赋值,该属性的setter引发了"PropertyChanged"事件,而该事件又有一个或多个视图元素在侦听它,那么你应该能够看到这一点。使用temp变量会带来很大的性能提升,因为每个事件侦听器只被触发一次,而不是两次(设置Person
属性时一次,初始化的属性时再次)。
提供的代码使用对象初始化程序(MSDN)
从该页面:
对象初始值设定项允许您在创建时将值分配给对象的任何可访问字段或属性,而不必调用后面跟着几行赋值语句的构造函数。对象初始值设定项语法使您能够为构造函数指定参数或省略参数(以及括号语法)。
基本上,这意味着您不需要()
,并且可以在{}
中指定公共字段/属性值。
此外;找一个不同的站点来学习MVVM。从UI直接创建Model/ViewModel对象是一个很大的禁忌。
这:
Person person = new Person
{
FirstName=FirstName.Text,
LastName=LastName.Text,
Addres=Address.Text
};
和:
Person person = new Person();
person.FirstName=FirstName.Text;
person.LastName=LastName.Text;
person.Addres=Address.Text;
是等效的。第一个是句法糖。