我正在使用"这个"我的默认构造函数中的关键字,下面是类电影中的代码
namespace Movie_List
{ enum GenreType { Action, War, Drama, Thriller };
class Movie
{
//Data Members
private String _title;
private int _rating;
private GenreType _type;
//Properties
public GenreType GenType
{
get { return _type; }
set { _type = value; }
}
public String Title
{
get { return _title; }
set { _title = value; }
}
public int Rating
{
get { return _rating; }
set { _rating = value; }
}
public Movie()
: this("Jaws", GenreType.Action, 4) { }
public Movie(String title, GenreType type, int rating ) //working ctor
{
Title = title;
GenType = type;
Rating = rating;
}
public override string ToString()
{
return String.Format(" {0} Genre : {1}, Rating: {2:d} Stars. ", Title, GenType, Rating);
}
}
我想从文本文件中读取,所以我在MainWindow.xaml.cs中使用了这段代码
private void btnLoad_Click(object sender, RoutedEventArgs e)
{
string lineIn = "";
string[] filmarray;
using (StreamReader file = new StreamReader("filmlist.txt"))
{
while ((lineIn = file.ReadLine()) != null)
{
filmarray = lineIn.Split(new char[] { ',' });
moviecollection.Add(new Movie()
{
Title = filmarray[0],
GenType = (GenreType)Enum.Parse(typeof(GenreType), filmarray[1]),
Rating = Convert.ToInt32(filmarray[2]),
});
lstFilms.ItemsSource = moviecollection;
}
}
}
我现在不需要这段代码
: this("Jaws", GenreType.Action, 4)
但是当我删除它时,类型动作和评级0星仍然会打印。
为什么这个发生有人知道?
答案 0 :(得分:1)
进行初始化时:
Movie movie = new Movie();
空构造函数
public Movie() : this("Jaws", GenreType.Action, 4) { }
调用具有多个参数的重载构造函数:
public Movie(String title, GenreType type, int rating) { ... }
当你删除这一行:this("Jaws", GenreType.Action, 4) { }
时,现在发生的事情是你只调用空的构造函数,它什么都不做。
所以当你打电话
int ratingValue = movie.Rating;
返回整数的默认值zero
,因为您确实在其上设置了任何内容。
<强>更新强>
一个简单的if
(也许,如果我理解你的意思)
假设Rating
应大于零。
public override string ToString()
{
if (Rating == 0)
{
return String.Format("{0}", Title);
}
else
{
return String.Format(" {0} Genre : {1}, Rating: {2:d} Stars. ", Title, GenType, Rating);
}
}
答案 1 :(得分:0)
这是因为enum
和int
始终使用默认值0进行初始化。
它不像string
- 如果你没有初始化它将等于null
。如果您要模仿int
的此行为,则可以尝试使用int?
类型。
要了解有关此主题的更多详情,请查看Default Values Table (C#)。