假如说我们创建了类A和类B,在B类的方法中想直接用类A点出A类中的方法的话,那必须A类中的方法是静态方法是吧
class Program
{
void Main()
{
A.method();//可以直接调用,method2必须实例化
}
}
class A
{
public static void method()
{
Console.WriteLine("hi");
} public void method2()
{
Console.WriteLine("hello");
}
}问题来了。
第一,VB.NET环境下的时候。假如创建Form1和Form2两个窗体(Form我认为同样也是一个类),我在Form1中写了个方法method或者是属性,没有加上static,我在Form2中直接调用Form1.method(),这么写居然也是能通过的,并不需要实例化就可以访问到method方法。
第二,C#环境下。同样上面的写法。很自然的就访问不到了。汗~~这是为什么呢??? 我的理解
是不是为了能够使VB.NET和VB6.0的一些写法要一致,才这样的?
貌似vs2005以前的版本(vs2003什么的)第一种情况是通不过的,很多vb6.0转vb.net的人都不适应?为了和谐...2005就适用了-_-!我太笨,不知道是不是这原因哦,请大虾帮助偶~~5个裤衩水了-_-!(不耻下问撒)
class Program
{
void Main()
{
A.method();//可以直接调用,method2必须实例化
}
}
class A
{
public static void method()
{
Console.WriteLine("hi");
} public void method2()
{
Console.WriteLine("hello");
}
}问题来了。
第一,VB.NET环境下的时候。假如创建Form1和Form2两个窗体(Form我认为同样也是一个类),我在Form1中写了个方法method或者是属性,没有加上static,我在Form2中直接调用Form1.method(),这么写居然也是能通过的,并不需要实例化就可以访问到method方法。
第二,C#环境下。同样上面的写法。很自然的就访问不到了。汗~~这是为什么呢??? 我的理解
是不是为了能够使VB.NET和VB6.0的一些写法要一致,才这样的?
貌似vs2005以前的版本(vs2003什么的)第一种情况是通不过的,很多vb6.0转vb.net的人都不适应?为了和谐...2005就适用了-_-!我太笨,不知道是不是这原因哦,请大虾帮助偶~~5个裤衩水了-_-!(不耻下问撒)
解决方案 »
- 当控件被数据绑定时,无法以编程方式向 DataGridView 的行集合中添加行。
- C# 如何获得[]里的值。。在线等,请大官指教。
- 如果限制一台电脑同时只能用一个帐号登陆网站?
- 禁用 CTRL+ TAB 切换应用程序
- c#操作vba???急,明天结贴!!
- c#在wince编程中例化Font没有GraphicsUnit.Pixel属性,怎么解决?
- 如何用正则获取到想要的内容
- 请问这个图标,要在VS2010的哪里才能设制呢?
- 一次录入和保存多条记录,不用datagrid是不是用控件数组还是其他什么??给点代码看看
- 难题!如何实现TREEVIEW中节点的移动和合并?(WEB)
- vs05发布网站提示空间不足
- FindControl
现在和谐很强大哦~~
以下代码无法编译通过
Module Module1
Public Class Class1
Public Sub Foo()
End Sub
End Class Public Class Class2
Public Sub Foo2()
Class1.Foo()
End Sub
End Class
Sub Main() End SubEnd Module
假如VB.net创建常规的类,就像类A和类B的话是和C#一样的 不能直接访问的
但是在VB.net的Form类中就可以,C#的Form类内是正常的不能访问的
为什么呢~~~
是的,我说的是在Form窗体类中的问题,常规的类中这么写是没问题的。
看我13楼的补充~~~~
呵呵,没说明白。补充下~~~-_-!
这是OOP啊..
对于WinForm程序
编译器自动生成了一个MyForms类,MS为了保持用户习惯,可谓是XXXXX。生成的类如下:[MyGroupCollection("System.Windows.Forms.Form", "Create__Instance__", "Dispose__Instance__", "My.MyProject.Forms"), EditorBrowsable(EditorBrowsableState.Never)]
internal sealed class MyForms
{
// Fields
public Form1 m_Form1;
public Form2 m_Form2;
[ThreadStatic]
private static Hashtable m_FormBeingCreated; // Methods
[EditorBrowsable(EditorBrowsableState.Never), DebuggerHidden]
public MyForms();
[DebuggerHidden]
private static T Create__Instance__<T>(T Instance) where T: Form, new();
[DebuggerHidden]
private void Dispose__Instance__<T>(ref T instance) where T: Form;
[EditorBrowsable(EditorBrowsableState.Never)]
public override bool Equals(object o);
[EditorBrowsable(EditorBrowsableState.Never)]
public override int GetHashCode();
[EditorBrowsable(EditorBrowsableState.Never)]
internal Type GetType();
[EditorBrowsable(EditorBrowsableState.Never)]
public override string ToString(); // Properties
public Form1 Form1 { [DebuggerNonUserCode] get; [DebuggerNonUserCode] set; }
public Form2 Form2 { [DebuggerNonUserCode] get; [DebuggerNonUserCode] set; }
}
Form1.vb
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Form2.Method()
End Sub
End ClassForm2.vb
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Public Sub Method()
Console.WriteLine("hi")
End Sub
End Class测试通过~~~
~~~~~~~~~~~~
{
Console.WriteLine("hi");
}
你的这个方法 是个静态类 可以直接 类名.方法名 调用
public void method2()
{
Console.WriteLine("hello");
}
是非静态 需要实例化后 再用对象名.方法名 调用
VS版本<2005 没被和谐
= 2005 和谐
>2005 又不和谐总结完毕
谁帮我确认下~ 虽然没意义,了解下