将私人课程传递给表格

时间:2016-07-24 02:02:02

标签: c# private

我在使用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);





    }


}
}

而且,如果重要的话,这是我的丑陋形式My Ugly Form

3 个答案:

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