我刚刚开始学习C#,曾经是一名VB程序员.
在VB.NET中,即使此方法未声明为共享,也可以访问表单类方法.在下面的代码,我不`吨得到编译器错误,并调用方法美孚内ClassFoo工作正常.
Public Class Form1
Public Sub Foo()
MsgBox("Test")
End Sub
End Class
Public Class ClassFoo
Sub Foo()
Form1.Foo()
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
然后,我尝试将相同的代码移植到C#,但是我收到一个错误:
"非静态字段和bla bla bla需要对象引用".
为什么我可以访问一个不在VB中共享的方法而且不能在C#中访问?
这是从VB6继承的一个相当可怕的特性,VB6是一种允许这种结构的语言.在纯OOP语言中不允许使用它,引用对象的成员需要对象名称而不是类型名称.
VB.NET团队在使用VB.NET语言时遇到了一些麻烦.此语句中的"Form1"实际上是一个对象引用,它由编译器自动生成.在线程btw中使用该名称时出现可怕的错误.
但是这不会用C#语言,你必须提供一个对象引用.您将不得不重新分解代码,以便ClassFoo对象具有该引用.像这样的东西:
public class Form1 {
ClassFoo fooObj;
public Form1() {
fooObj = new ClassFoo(this);
}
public void Foo() {
MessageBox.Show("un-fooed");
}
}
public class ClassFoo {
Form1 mainForm;
public ClassFoo(Form1 main) {
mainForm = main;
}
public void Foo() {
mainForm.Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
在学习C#时,这可能会导致一些痛苦.这方面的Q&D解决方法是使用Application.OpenForms.如果您喜欢使用子弹,请避免使用它.
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |