Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提示用户通过多个类输入数据信息_C#_Class_Oop_Inheritance_Prompt - Fatal编程技术网

C# 提示用户通过多个类输入数据信息

C# 提示用户通过多个类输入数据信息,c#,class,oop,inheritance,prompt,C#,Class,Oop,Inheritance,Prompt,我正在尝试使用OOP创建一个数据库程序。我已经试着解决这个问题好几个月了,但似乎找不到我想要的答案。在我的课程中,我列举了一些例子,甚至是一篇短文,但又回到了我所知道的极限 我的目标是允许用户输入数据并将其安全地存储在另一个类中。当程序结束时,它将输出来自另一个类的用户信息,而不是一个类中的所有信息 我已经复习了我的课程,比如C#Master和查阅微软的C#教程 代码表1 using System; namespace DataBase { public class Data

我正在尝试使用OOP创建一个数据库程序。我已经试着解决这个问题好几个月了,但似乎找不到我想要的答案。在我的课程中,我列举了一些例子,甚至是一篇短文,但又回到了我所知道的极限

我的目标是允许用户输入数据并将其安全地存储在另一个类中。当程序结束时,它将输出来自另一个类的用户信息,而不是一个类中的所有信息

我已经复习了我的课程,比如C#Master和查阅微软的C#教程

代码表1

using System;

namespace DataBase
{
    public class Data
    {
        static string userFirst, userLast, userGender;
        static int userAge;
        static void Main(string[] args)
        {
            Data_Storage user = new Data_Storage(userFirst, userLast, userGender, userAge);

            Console.WriteLine("Please input First Name: ");
            userFirst = Console.ReadLine();

            Console.WriteLine("Please input Last Name: ");
            userLast = Console.ReadLine();

            Console.WriteLine("Please input Gender: ");
            userGender = Console.ReadLine();

            Console.WriteLine("Please input Age: ");
            userAge = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine(user.ToString());
        }
代码表2

using System;
using System.Collections.Generic;
using System.Text;

namespace DataBase
{
    class Data_Storage
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string gender { get; set; }
        public int age { get; set; }

        //Implicitly
        public Data_Storage()
        {
            firstName = "First";
            lastName = "Last";
            gender = "Null";
            age = 0;
        }

        //Instance constructor
        public Data_Storage(string userFirst, string userLast, string userGender, int userAge)
        {
            this.firstName = userFirst;
            this.lastName = userLast;
            this.gender = userGender;
            this.age = userAge;
        }

        public override string ToString()
        {
            return String.Format(this.firstName + "\n" + this.lastName + "\n" + this.gender + "\n" + this.age);
        }

    }
}
测试此代码时,它将只返回我创建的默认构造函数,而不是引用我的实例构造函数。

而不是:

userFirst = Console.ReadLine();
这样做:

user.firstName = Console.ReadLine();
var user = new Data_Storage();
并对所有其他属性重复此操作。这会解决你的问题。您还可以删除整个构造函数,因此,不要这样做:

Data_Storage user = new Data_Storage(userFirst, userLast, userGender, userAge);
这样做:

user.firstName = Console.ReadLine();
var user = new Data_Storage();
您还可以删除以下内容:

static string userFirst, userLast, userGender;
static int userAge;

这里的问题是,在调用此构造函数时:

Data_Storage user = new Data_Storage(userFirst, userLast, userGender, userAge);
您尚未为传入的任何变量设置值。相反,您可以在从用户收集信息后移动此行

您还可以通过使用默认构造函数创建类,然后直接设置属性来缩短代码:

Data_Storage user = new Data_Storage();

Console.WriteLine("Please input First Name: ");
user.firstName = Console.ReadLine();

Console.WriteLine("Please input Last Name: ");
user.lastName = Console.ReadLine();

Console.WriteLine("Please input Gender: ");
user.gender = Console.ReadLine();

Console.WriteLine("Please input Age: ");
user.age = Convert.ToInt32(Console.ReadLine());

Console.WriteLine(user);

看起来您正在创建
Data\u Storage
类的实例,然后才在传递给构造函数的变量中设置任何值。您应该在用户输入值后创建实例。在输入变量之前,您正在使用变量创建
user
实例。您确实需要学习。这非常有效!我想我把语法和逻辑搞混了。再次感谢您的快速修复!