我是初学者编码器,我正在学习c#,我想知道是否可以在属性的set部分内使用Console.ReadLine(),然后像使用方法一样读取用户输入,如如下:
class Employee
{
protected int empID;
public int EmployeeID
{
set
{
Console.WriteLine("Please enter Employee ID:");
this.empID = int.Parse(Console.ReadLine());
}
}
//more code here
}
class Program
{
static void Main(string[] args)
{
Employee employee1 = new Employee();
employee1.EmployeeID;
//more code here
}
}
或唯一的选择是直接在“Main”中使用Console.ReadLine(),如下所示:
class Employee
{
protected int empID;
public int EmployeeID { set; }
//more code here
}
class Program
{
static void Main(string[] args)
{
Employee employee1 = new Employee();
employee1.EmployeeID = int.Parse(Console.ReadLine());
//more code here
}
}
提前感谢您的所有答案!
谢谢大家的回答!我现在可以看到这是编写代码的错误方法,我理解为什么。我认为通过使用'Console.ReadLine();'在'set'属性中,更容易从用户那里获得价值,我不必重写这部分:'
Console.WriteLine("Please enter Employee ID:");
this.empID = int.Parse(Console.ReadLine());
每次我都会要求用户输入。 但我现在明白为什么不应该使用它 再次感谢您的所有答案,祝您有愉快的一天!
答案 0 :(得分:4)
是的,您可以将Console.ReadLine()
置于一个集合中。但这是非常错误的。
C#属性的编译方式与方法类似,因此您可以将任何可用的C#代码放在属性中,编译器将允许您这样做。 (你的代码中的问题是你没有为集合写正确的调用)。
但是考虑到良好实践和S.O.L.I.D,这是非常错误的。您的第二个代码段看起来要好得多。
只是出于好奇(不要使用它):
要完成第一个代码工作,您需要重写一行:
employee1.EmployeeID;
对于这样的事情:
employee1.EmployeeID = 0; // This syntax will call the property set you wrote.
现在看到问题?当您阅读代码时,它似乎将您的属性设置为零(0),而是从控制台读取代码,因此您可以理解如果您使用该代码将会出现问题。
答案 1 :(得分:3)
public class Employee
{
public int EmployeeID { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter Employee ID:");
var empID = int.Parse(Console.ReadLine());
var employee1 = new Employee
{
EmployeeID = empID
};
}
}
Getters
和Setters
只应用于设置/返回Property所拥有的任何值。您还可以创建私有字段并使用不同的方法设置它们。但是,您不会从课程中拨打Console.ReadLine()
。该类是您实体的代表。
答案 2 :(得分:1)
你正走向错误的方向。
正确的方法是通过Main
方法。
或者如果你想出于某种原因将功能放在你的课堂上,那应该是这样的
class Employee
{
protected int empID;
public int EmployeeID
{
get { return empId; }
}
//more code here
public void AskEmployeeID()
{
Console.WriteLine("Please enter Employee ID:");
this.empID = int.Parse(Console.ReadLine());
}
}
现在,您可以在Employee
对象上将此功能称为employee1.AskEmployeeID();