我是个新手程序员。我已经写了9到11周的脚本了。不管我是如何按照你们推荐的帖子买书的。我正在努力学习"OOP",这可能是一个小小的挑战。我已经做了书后面的练习。第一个练习告诉我要编写一个控制台应用程序,提示用户输入运动类型和教练名称。
我的代码:
static void Main(string[] args)
{
Sport sport01 = new Sport();
sport01.TypeOfSport = GetSportsName();
sport01.CoachesName = GetCoachesName();
Console.WriteLine();
Console.WriteLine(sport01.ToString());
System.Threading.Thread.Sleep(8000);
}
// Prompting user input for type of sport.
public static string GetSportsName()
{
string typeOfSport;
Console.Write("Enter Sports Name : ");
typeOfSport = Console.ReadLine();
return typeOfSport;
}
// Prompting user inout for coaches name.
public static string GetCoachesName()
{
string coachesName;
Console.Write("Enter Coaches Name : ");
coachesName = Console.ReadLine();
return coachesName;
}
class Sport
{
protected string typeOfSport;
protected string coachesName;
public Sport()
{
typeOfSport = "Not Given";
coachesName = "Not Given";
}
public Sport(string typeOS, string coachesN)
{
typeOfSport = typeOS;
coachesName = coachesN;
}
public string TypeOfSport
{
get { return typeOfSport; }
set { typeOfSport = value; }
}
public string CoachesName
{
get { return coachesName; }
set { coachesName = value; }
}
public override string ToString()
{
return "\n" + "\n" +
"\nSports Name : " + typeOfSport +
"\n" +
"\nCoaches Name : " + coachesName;
}
}
发布于 2018-06-09 09:15:50
有时将类视为immutable会更好;一旦创建,它就永远不会改变。例如:
class Sport
{
protected readonly string typeOfSport;
protected readonly string coachesName;
public Sport(string typeOfSport, string coachesName)
{
this.typeOfSport = typeOfSport;
this.coachesName = coachesName;
}
public string TypeOfSport
{
get { return typeOfSport; }
}
public string CoachesName
{
get { return coachesName; }
}
public override string ToString()
{
return "\n" + "\n" +
"\nSports Name : " + typeOfSport +
"\n" +
"\nCoaches Name : " + coachesName;
}
}
现在你不必处理一项可能没有教练名字或类型的运动,你可以摆脱那些丑陋的“没有给出”的值:
static void Main(string[] args)
{
var typeOfSport = GetSportsName();
var coachesName = GetCoachesName();
var sport = new Sport(typeOfSport, coachesName);
Console.WriteLine();
Console.WriteLine(sport.ToString());
System.Threading.Thread.Sleep(8000);
}
请注意,任何时候都不存在无效的体育项目。
这种方法确实创建了更多的临时变量,但这并不一定是一件坏事,在交易中,您永远不必担心在使用之前验证一个Sport。
如果您确实希望保持类的可变性,就像在原始代码中一样,我建议不要使用Not Given,因为它们被认为是code smell。例如,如果有人给他们的孩子取名为“没有给予”,而他长大后成为了一名教练,那么这种做法就会失败。为了表示缺少的值,惯例是简单地使用null
。
此外,通常建议在第一次使用变量时声明该变量,如下所示:
public static string GetSportsName()
{
Console.Write("Enter Sports Name : ");
var typeOfSport = Console.ReadLine();
return typeOfSport;
}
您还会注意到,我将大多数变量声明更改为使用var
,这允许编译器从赋值中推断类型。
最后要注意的是,用数字来命名变量(例如sport01
)是一种糟糕的形式。如果您有多个,请将它们放入数组或List中。如果你没有多个,不要只在上面放一个01,因为开发人员可能会期望在某个地方有一个02或03。如果你确实需要两个逻辑上不属于一个列表的实例,给它们起个名字来描述它们的用途,例如morningSport
和eveningSport
之类的。
https://stackoverflow.com/questions/50769988
复制相似问题