C# 传递私有类以形成
我有一些使用Murach的C#book的私人课程的小经验,但我仍然是一个新手。我正在尝试创建我自己的项目,其中包括一个“患者Id”“姓名”“体重”,然后是一个推荐的每日蛋白质摄入量方程式(体重*.86)。这最终将成为一个基本的数据库,然而,现在我甚至很难显示结果。此外,每日蛋白质摄入量的计算在我所做的课程中不起作用 这是我的班级代码:C# 传递私有类以形成,c#,private,C#,Private,我有一些使用Murach的C#book的私人课程的小经验,但我仍然是一个新手。我正在尝试创建我自己的项目,其中包括一个“患者Id”“姓名”“体重”,然后是一个推荐的每日蛋白质摄入量方程式(体重*.86)。这最终将成为一个基本的数据库,然而,现在我甚至很难显示结果。此外,每日蛋白质摄入量的计算在我所做的课程中不起作用 这是我的班级代码: using System; using System.Collections.Generic; using System.Linq; using System.T
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);
}
}
}
如果有关系的话,这是我难看的表单我不太理解你的问题,我没有读过你提到的书,但从我看到,你的摄入类不是私有的,所以唯一的问题是你试图在你的MessageBox中显示一个私有字段,因此,如果你取消对语句的注释,它根本不会编译。 因此,如果要在MessageBox中显示实例的名称:
MessageBox.Show("Name: " + intake.Name);
肯定会有用的。
你要记住的唯一一件事(在这种情况下)是私人领地和公共财产之间的区别。
私有字段只能在类内部访问,公共属性可以由所有程序访问
公开
访问不受限制
受保护 访问权限仅限于包含类或从包含类派生的类型
内部 访问权限仅限于当前程序集
受保护的内部 访问权限仅限于从包含类派生的当前程序集或类型
私人 访问权限仅限于包含的类型
我不太理解你的问题,我没有读过你提到的书,但从我看到的情况来看,你的摄入类不是私有的,所以唯一的问题是你试图在你的MessageBox中显示一个私有字段,因此,如果你取消对语句的注释,它根本不会编译。 因此,如果要在MessageBox中显示实例的名称:
MessageBox.Show("Name: " + intake.Name);
肯定会有用的。
你要记住的唯一一件事(在这种情况下)是私人领地和公共财产之间的区别。
私有字段只能在类内部访问,公共属性可以由所有程序访问
公开
访问不受限制
受保护 访问权限仅限于包含类或从包含类派生的类型
内部 访问权限仅限于当前程序集
受保护的内部 访问权限仅限于从包含类派生的当前程序集或类型
私人 访问权限仅限于包含的类型
在Intrange类中,添加GetProteinIntake()方法: 在表单中,将btnCalculate\u单击事件替换为:
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();
}
在Intrange类中,添加GetProteinIntake()方法: 在表单中,将btnCalculate\u单击事件替换为:
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();
}
仅供参考:在“摄入”类中,您可以重写ToString()
然后你可以使用
MessageBox.Show(intake.ToString());
仅供参考:在“摄入”类中,您可以重写ToString()
然后你可以使用
MessageBox.Show(intake.ToString());
正在执行
MessageBox.Show(“名称:”+inctain.Name)代码>不起作用,但正在执行MessageBox.Show(“名称:”+inctain.Name)代码>应该可以正常工作。执行MessageBox.Show(“Name:”+inctain.Name)代码>不起作用,但正在执行MessageBox.Show(“名称:”+inctain.Name)代码>应该可以正常工作。你能详细说明一下吗?我试着使用这个,但得到了“错误CS1503参数1:无法从'double'转换为'string'”我想把它分配给我的文本框,它将是“txtProtein.Text”哦,你应该将public int
更改为public double
(没有注意数字类型),然后可以使用intain.getproteininke().ToString()
将其分配给textbox.intain.getproteininke().ToString(txtProtein.Text);还是不算。知道为什么吗?抱歉。。。这将是txtProtein.Text=administration.GetProteinIntake().ToString()
这也不起作用。。。我做错什么了吗?你能详细说明一下吗?我试着使用这个,但得到了“错误CS1503参数1:无法从'double'转换为'string'”我想把它分配给我的文本框,它将是“txtProtein.Text”哦,你应该将public int
更改为public double
(没有注意数字类型),然后可以使用intain.getproteininke().ToString()
将其分配给textbox.intain.getproteininke().ToString(txtProtein.Text);还是不算。知道为什么吗?抱歉。。。这将是txtProtein.Text=administration.GetProteinIntake().ToString()
这也不起作用。。。我做错什么了吗?