gpt4 book ai didi

c#-4.0 - 私有(private)变量的真正含义是什么?

转载 作者:行者123 更新时间:2023-12-04 02:51:13 25 4
gpt4 key购买 nike

我有一个名为 form1 的表单,还有一个名为 class1 的类当我试图从 class1 的 form1 中的文本框中获取文本时。我真的花了两天时间才弄清楚获取文本的正确方法。

见下面的代码:

我有以下类(class):

class Class1
{
// field to hold the Form1 object reference
private Form1 DataEntryForm;

// Class1 constructor
public Class1(Form1 form)
{
// store the Form1 object reference
DataEntryForm = form;
}


public void gettext()
{
//the following doesn't work..
string textintextbox = DataEntryForm.textBox1.text;
//I get the following error => somenamespace.Form1.textBox1 is inaccessible due to its protection


//but the following code works just fine.... why?
textintextbox = ((TextBox)DataEntryForm.Controls.Find("textBox1",true).FirstOrDefault()).Text;
}
}

如您所见,我知道我必须在 class1 中声明对表单的引用,然后像这样访问文本框“myform1refence.textbox1.text”,但是如果您查看上面的代码,这将无法正常工作,因为 textbox1是私有(private)的。所以我谷歌就像我被拥有解决这个问题,无论我走到哪里,人们都建议我“不应该”将 textBox1 公开,因为它是糟糕的编程或其他东西,但我应该像这样创建一个公共(public)变量

 public partial class Form1 : Form
{
public sometype somevariablename {get { return somePrivatevariablename; } set { somePrivatevariablename = value; }}
}

所以我认为这是我应该从 class1 访问我的 textbox1 的正确方法所以我写了以下内容

 public partial class Form1 : Form
{
public TextBox _textBox1 {get { return this.textBox1; } set { this.textBox1 = value; }}
}

所以当我在 class1 中键入以下内容时它起作用了!

展览A

 string textintextbox = DataEntryForm.textBox1.text;

所以我花了一天时间继续编码,并接受这是解决我的问题的最佳方法。然后我偶然发现了以下代码:

展览B

 string textintextbox =    ((TextBox)DataEntryForm.Controls.Find("textBox1",true).FirstOrDefault()).Text;

使用上面的代码,我不需要在为 textBox1 创建公共(public) getter 和 setter 时公开 textbox1,我需要做的就是创建 form1 引用。

所以我的问题是,为什么展览 B 只引用了一种形式,但exhibition A 需要引用表格和被访问的变量才能公开工作。为什么这是……我错过了什么?

最佳答案

图表 A 依赖于引用该组件的公共(public)成员。如果组件不存在,则设计器生成的字段 (this.textBox1) 也不存在,程序将无法编译。

图表 B 按名称查找组件。如果该组件不存在,程序将编译得很好,但随后在运行时失败。

在这种情况下,编译错误通常比运行时错误更受欢迎,但正确的选择最终取决于您的质量要求。

关于c#-4.0 - 私有(private)变量的真正含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17615999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com