初始化构造函数/对象的可能方法

时间:2014-11-06 20:36:36

标签: c# wpf oop mvvm mvvm-toolkit

对于OOP,我是初学者。昨天我试图阅读一些mvvm / wpf示例,当然我遇到了麻烦......我对下面的一些代码有一些问题:

{
class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Addres { get; set; }
}

这只是普通的Person类,这里没什么特别的。问题是我无法理解下面的代码:

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
}

我们当然有这个类的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; }
}
}

同样,这部分代码是我无法理解的:

public class SongViewModel
{
Song _song;

public Song Song

这是什么“宋_松”;是什么?这是宋班的对象?这个属性“宋歌”也很奇怪......可能我缺乏知识

3 个答案:

答案 0 :(得分:6)

我不得不在这里留下一个新答案,因为我看到有两个人弄错了。初始化语法:

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属性时),然后再次触发 属性已初始化。)

答案 1 :(得分:3)

提供的代码使用对象初始化程序MSDN

从该页面开始:

  

对象初始值设定项允许您在创建时为任何可访问的字段或属性赋值,而无需调用构造函数后跟赋值语句行。使用对象初始值设定语法可以指定构造函数的参数或省略参数(和括号语法)。

基本上,这意味着您不需要(),并且可以在{}中指定公共字段/属性值。

也;找一个不同的网站来学习MVVM。从UI直接创建Model / ViewModel对象是 big no-no。

答案 2 :(得分:0)

此:

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;

是等同的。第一个是语法糖。