h00*_*raq 2 c# oop wpf mvvm mvvm-toolkit
我是初学者,谈到OOP.昨天我试图阅读一些mvvm/wpf示例,当然我遇到了麻烦...我有一些问题,了解下面的一些代码:
{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Addres { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这只是普通的Person类,这里没什么特别的.问题是我无法理解下面的代码:
private void SayHi_Click(object sender, RoutedEventArgs e)
{
Person person = new Person
{
FirstName=FirstName.Text,
LastName=LastName.Text,
Addres=Address.Text
};
Run Code Online (Sandbox Code Playgroud)
我不理解的部分是:
Person person = new Person
{
FirstName=FirstName.Text,
LastName=LastName.Text,
Addres=Address.Text
};
Run Code Online (Sandbox Code Playgroud)
我不确定这究竟是什么.我认为每个新对象都应该像这样初始化: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
}
Run Code Online (Sandbox Code Playgroud)
我们当然有这个类的View Model:
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
而且,这部分代码是我无法理解的:
public class SongViewModel
{
Song _song;
public Song Song
Run Code Online (Sandbox Code Playgroud)
这个"宋_song"是什么 是什么?这是宋班的对象?这个属性"宋歌"也很奇怪......可能我缺乏知识
我不得不在这里留下一个新答案,因为我看到有两个人弄错了.初始化语法:
Person person = new Person
{
FirstName = FirstName.Text,
LastName = LastName.Text,
Address = Address.Text
};
Run Code Online (Sandbox Code Playgroud)
是不完全等同于创建一个新的变量"人",然后指定属性.相反,它等同于创建临时变量,分配属性,然后将结果分配给"人":
Person person;
var temp = new Person();
temp.FirstName = FirstName.Text;
temp.LastName = LastName.Text;
temp.Address = Address.Text;
person = temp;
Run Code Online (Sandbox Code Playgroud)
这种区别实际上非常重要,尤其是在视图模型中工作.如果您想要分配给其setter引发"PropertyChanged"事件的属性,您应该能够看到这一点,而该事件又有一个或多个视图元素在监听它.使用温度在一个大的性能增益变化的结果,因为每一个事件监听器被发射只有一次,而不是两次(一次当Person属性设置,然后再在每一个它的属性初始化).