我在使用Murach的C#书时使用私人课程有一些小经验,但我仍然是一个新手。我正在尝试创建自己的项目,其中包括一个" Patient Id" "名称" "重量"然后是推荐的每日蛋白质摄入量的等式(重量* .86)。这最终将被制作成一个基本的数据库,但是,现在我正在努力甚至显示结果。此外,每日蛋白质摄入量的计算在我所做的课程中不起作用。
这是我的班级代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Form1
{
public class Intake
{
private string name;
private int patientId;
private int weight;
//private int proteinIntake = weight * .86;
//Constuctor
public Intake() { }
//Overload Constructor
public Intake(string name, int patientId, int weight)
{
this.Name = name;
this.PatientId = patientId;
this.Weight = weight;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public int PatientId
{
get
{
return patientId;
}
set
{
patientId = value;
}
}
public int Weight
{
get
{
return weight;
}
set
{
weight = value;
}
}
public string GetDisplayText(string sep) =>
name + patientId + sep + weight;
}
}
这是我的表单代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Form1
{
public partial class Form1 : Form
{
public static Intake intake = null;
public Form1()
{
InitializeComponent();
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btnCalculate_Click(object sender, EventArgs e)
{
Intake intake = new Intake(txtName.Text, Convert.ToInt32(txtPatientId.Text), Convert.ToInt32(txtWeight.Text) );
//obviously does not work MessageBox.Show("Name: " + intake.name);
}
}
}
答案 0 :(得分:2)
我不太了解你的问题,我没有看过你提到的书,但从我看到的,你的Intake课程不是私密的,所以唯一的问题是你试图在你的MessageBox,如果取消注释该语句,它根本不编译。 因此,如果要在MessageBox中显示实例的名称:
MessageBox.Show("Name: " + intake.Name);
肯定会有用。 你必须要记住的唯一事情(在这种情况下)是私人fieds和公共财产之间的区别。 私人字段只能在您的班级内访问,所有程序都可以访问公共属性。
Accessibility Levels (C# Reference)
公开强>
访问不受限制。
<强>保护强>
Access仅限于从包含类派生的包含类或类型。
<强>内部强>
访问仅限于当前程序集。
受保护的内部
Access仅限于从包含类派生的当前程序集或类型。
<强>私有强>
访问仅限于包含类型。
答案 1 :(得分:2)
Fyi:在&#34;摄入&#34; class,你可以覆盖ToString()
public override string ToString()
{
return string.Format("Name: {0}, PatientId: {1}, Weight: {2}", Name, PatientId, Weight);
}
然后你可以使用
MessageBox.Show(intake.ToString());
答案 2 :(得分:0)
在Intake类中,添加GetProteinIntake()方法:
public class Intake
{
... your existing code ....
public double GetProteinIntake()
{
return weight * 0.86;
}
}
在表单中,将:btnCalculate_Click事件替换为:
private void btnCalculate_Click(object sender, EventArgs e)
{
Intake intake = new Intake(txtName.Text, Convert.ToInt32(txtPatientId.Text), Convert.ToInt32(txtWeight.Text));
txtProtein.Text = intake.GetProteinIntake().ToString();
}