C# 如何以不同的形式访问getter函数?
我在一个项目/名称空间中有两个表单需要相互通信。表格A创建表格B的一个实例;表单B需要访问表单a中的值(看起来很简单) 我在VB中从头开始构建表单时创建了这种类型的功能。这一次我正在处理一个预先存在的项目,我无法让表格B访问表格a的值。是什么导致了这个问题,我该如何解决它 谢谢你的帮助 我在表单a中创建了一个getter函数:C# 如何以不同的形式访问getter函数?,c#,.net,winforms,C#,.net,Winforms,我在一个项目/名称空间中有两个表单需要相互通信。表格A创建表格B的一个实例;表单B需要访问表单a中的值(看起来很简单) 我在VB中从头开始构建表单时创建了这种类型的功能。这一次我正在处理一个预先存在的项目,我无法让表格B访问表格a的值。是什么导致了这个问题,我该如何解决它 谢谢你的帮助 我在表单a中创建了一个getter函数: public string getID() { return txtID.Text; } 然后我尝试以表格B访问
public string getID()
{
return txtID.Text;
}
然后我尝试以表格B访问此方法:
string strID = getID();
我得到的错误是:“当前上下文中不存在名称'getID'”
此外,我尝试以这种方式访问函数(但不起作用):
您声明了一个实例方法(由于某种原因而不是属性,并且忽略了.NET命名约定,但是…)
这意味着您需要在表单的实例上调用它。举个简单的例子:
FormA a = new FormA();
// Use a for a while, whatever
String id = a.getID();
现在,由于是FormA
创建了FormB
本身,它可能只需要使用this
将对自身的引用传递到FormB
:
FormB formB = new FormB(this);
...
class FormB
{
private FormA parent;
internal FormB(FormA parent)
{
this.parent = parent;
}
public void SomeOtherMethod()
{
// Or parent.Id as it would normally be, as a property...
string id = parent.getID();
}
}
不过,像这样紧密地结合表单通常不是一个好主意。
FormB
以后真的需要获取值吗?也许FormA
可以将ID传递给FormB
的构造函数?我没有粘贴问题中使用的代码,而是一个示例来说明发生了什么。如果表单A存在并创建了表单B,我为什么要创建表单A的实例?@Azzi:我只是给出了一个调用实例方法的示例。请参阅我编辑的答案-无论您做什么,FormB都需要引用FormA的相关实例,以便调用实例方法(或属性)。它如何获得该引用取决于您。重要的是你要理解为什么它是必要的——我建议你暂时放下GUI,回到C#的基础上。(GUI本身就已经够复杂的了——在我看来,一次学习一件事是件好事。)表单B确实需要稍后获得值。我以前用VB中的一个公共getter完成了这个任务。@Azzi:那么表单B需要引用FormA的实例。就这么简单。如果没有实例可以调用实例方法,则无法调用实例方法。这就像问:“贝隆的生日是什么?”而没有具体说明你在谈论谁。VB假设表单只有一个实例,这可能会让事情变得混乱。
FormB formB = new FormB(this);
...
class FormB
{
private FormA parent;
internal FormB(FormA parent)
{
this.parent = parent;
}
public void SomeOtherMethod()
{
// Or parent.Id as it would normally be, as a property...
string id = parent.getID();
}
}