在set属性中使用console.ReadLine()

时间:2015-08-28 19:05:11

标签: c# properties console console.readline

我是初学者编码器,我正在学习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());

每次我都会要求用户输入。 但我现在明白为什么不应该使用它 再次感谢您的所有答案,祝您有愉快的一天!

3 个答案:

答案 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
        };
    }
}

GettersSetters只应用于设置/返回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();