我是一名新手程序员。我已经写了大约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;
}
}
答案 0 :(得分:0)
将课程视为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;
}
}
现在你不必处理一个可能没有教练姓名或类型的运动,你可以摆脱那些丑陋的" Not Given"值:
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);
}
请注意,任何运动都不存在无效。
这种方法确实创造了更多临时变量,但这并不一定是坏事,在交易中你永远不必担心在使用之前验证一项运动。
如果您确实希望将课程保持为可变,就像在原始代码中一样,我建议不要使用magic number(即" 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
或其他。