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