白捡份----静态与非静态
using System;
class Test
{
in x;
static int y;
void F(){
x=1;
y=1;
}
static void G(){
x=1;此处为何错误
y=1;
}
static void Main(){
Test t=new Test();
t.x=1;
t.y=1;此处为何错误
Test.x=1;此处为何错误
Test.y=1;
}
}
请大家讲讲静态成员与非静态成员的区别!
问题点数:20、回复次数:6Top
1 楼zyug(LovlyPuppy)回复于 2005-03-03 17:50:27 得分 2
x=1;此处为何错误
in x -》int x;
t.y=1;此处为何错误
这一处,你要声明public static int y;并且要用Test.y 才可以访问
Test.x=1;此处为何错误
这一处要用t.x并且也要用public 级别
Top
2 楼zyug(LovlyPuppy)回复于 2005-03-03 17:52:28 得分 2
看错了,不好意思,我以为不是一个类,上面的不成立了Top
3 楼zyug(LovlyPuppy)回复于 2005-03-03 17:54:19 得分 2
级别不成立了,你看一下书吧
静态字段的访问是类名 + 字段名直接访问的
静态构造函数只能初始化静态字段Top
4 楼web_gus(树欲静而风不止)回复于 2005-03-03 17:59:05 得分 2
静态方法,只能访问静态成员。。Top
5 楼kinzey(kinzey)回复于 2005-03-03 17:59:42 得分 2
静态的用类访问
非静态的用对象访问Top
6 楼ArLi2003(阿利,MSN:url@163.com)回复于 2005-03-03 19:24:44 得分 10
>x=1;此处为何错误
因为x 不是静态的
>t.y=1;此处为何错误
因为y 是静态的,不是t 的实例成员
>Test.x=1;此处为何错误
因为x 不是静态的,不是test 命名空间的成员
静态就是不管是实例还是静态域都能访问的东西,用它的容器访问它就行了
非静态,比如实例成员,就必须指定它的实例句柄才可以访问它,不然,如果有一堆的new test实例,每个实例都一个自己的x 那你如果用 .x 指的是哪一个x?而test.y 则不同,管你几个实例,静态成员始终是那一个。。
可以这么想,去TMD的静态实例的理论,一个原则,静态在工程任何地方可以访问到(但不一定能作用,比如定义成private,就不能在别的容器访问它,public 就可以,它决定了作用域。而静态不静态则决定它是否可以访问到)
非静态,比如实例成员的话就就必须提供句柄
建议从内存模型去理解它,先明白什么是实例化,自然就明白静态非静态的区别了,它是一个概念不是一个简单的答案Top




