-1

我对我的书的一个例子有疑问。从我读过的内容来看,如果没有类的对象实例,就不能使用非静态方法。那么这样可以吗?

public partial class TempAgencyForm : Form
{
     public TempAgencyForm()
     {
        InitializeComponent();
     }

     private void  btnCalculate_Click(object sender, EventArgs e)
     {
        ...
        setVisibility(false);
     }

     private void  setVisibility(bool visibilityValue)
     {
         ...
     }
 }
4

4 回答 4

4

是的,没关系。一个非静态方法可以调用另一个非静态方法。

来电:

setVisibility(false);

也可以写成:

this.setVisibility(false);

this限定词是多余的。

但是,如果您尝试从成员内部调用没有实例限定的非静态方法static,那将是一个问题(编译时错误)。

于 2013-11-11T13:23:33.667 回答
3

我假设你在谈论 call setVisibility(false);。是的,这很好,它或调用它的方法都不是静态的。

这一切都将发生在一个实例中TempAgencyForm

于 2013-11-11T13:22:09.453 回答
1

是的,这没关系,因为它是从另一个成员内部调用的。

你是对的,因为setVisibility()is not static,它总是必须在父类的某个对象的上下文中调用(TempAgencyForm在这个例子中)。

但是,btnCalculate_Click()是 的另一个成员TempAgencyForm,因此您可以使用this关键字 ( this.setVisibility()) 访问当前/本地对象,如果没有歧义,这是可选的。

于 2013-11-11T13:24:33.477 回答
0

静态或非静态在这里无关紧要,您正在调用在同一对象中声明的成员函数。所以简短的回答是“很好”

您如何称呼 TempAgencyForm 成员可能就是您所指的

在这种情况下(如您所定义)需要实例化

TempAgencyForm taf = new TempAgencyForm()
taf.setVisibility(false);

但是,如果您的类定义本身是静态的,即

public static partial class TempAgencyForm 

然后,

TempAgencyForm.setVisibility(false); 

就足够了(无需实例化对象),因为在应用程序启动时对象已经加载到堆栈上

于 2013-11-11T13:27:02.877 回答