c#静态

c# 静态方法,和静态属性

2009-6-23 23:12
提问者: math_phy | 浏览次数:2633次
是不是静态方法只能访问静态属性!!!!!

静态方法,能访问实例对象的数据吗???

用什么方式访问呢??

问题补充:

3  实例对象能访问,静态成员吗?如何??

4 是不是访问静态成员的方法,要声明为静态呢??


5 静态对象和实例对象,其实对于c#的运行时,都是一样的,只不过能不能做为模板来使用,还有访问,一个是类名,一个是对象名,就这点区别,还有其他吗? 

turbo280
的很不错了 


手持??应该是handel吧  一般我都认为说成,句柄

我来帮他解答
2009-6-24 02:07
满意回答
首先访问静态成员是不必创建对象的,直接 类名.静态成员名就可以访问到,实

例对象无法访问静态成员的,两者的最大的区别在于程序加载时给所有的static

分配内存,且常驻内存,非静态时在实例化的时候才分配,但调用一个常用方法

或属性而每次去创建一个实例,那样影响执行效率和性能,static一般用于需要

全局共享时声明,期生命周期和主进程相同,垃圾回收机制对它都不起作用。

不知我小小的意见能不能帮上你忙,祝你好运!
27
| 评论(1)

回答者: turbo280 | 二级

擅长领域: 韩语 大连市

参加的活动: 暂时没有参加的活动

其他回答 共3条
2009-6-24 13:45 jam_li | 六级
静态方法是不需要实例就可以调用的,连实例都没有,怎么可能访问到实例对象的数据呢 
调用静态成员需要用“类名.成员”名调用,谁能调用谁不能调用只受成员的作用域限制。所以,在类的实例方法中是可以调用静态成员的,只不过仍然需要用“类名.成员名”的方式。 
2
| 评论
2009-6-25 15:02 wcpeter1988 | 四级
一楼有一点错误,实例对象访问静态成员没有问题,
为二楼做点补充
静态成员在未运行时无法访问实例对象的原因是因为无法取到这个实例对象(因为还没创建),但运行后在实例对象创建后就可以取到了,可以通过添加静态的属性用来保存实例对象,然后就可以在静态成员中使用该静态属性调用XX对象,但是这仍然是在使用静态属性,只不过该属性指向了一个实例对象。
所以能不能访问,能,手持着对象都能访问。 
1
| 评论
2009-6-26 15:03 78561940 | 五级
这些简单的技术问题,你可以到csdn论坛里面问问,也可以直接看MSDN的,很基础的概念,自己要看看书,然后结合一些程序看一下就清楚了。 

提醒一下;handle 是句柄的意思,不是handel 
     
     

c#静态成员与静态方法

  (2012-03-06 13:51:50)
分类: 技术-C#

http://www.cnblogs.com/jyfly1984/archive/2010/10/27/1862674.html

 

静态成员

1. (初始化) C#静态方法及属性在程序启动的时候,就全部装入内存的,而不管这些方法、属性以后有没有用到。即使是没有人再访问程序,这部分内存仍然不会释放

【实验证明,不需要实例化类对象,静态成员就已经被赋值】

- 【实验证明,甚至不需要访问到静态变量,它就会被赋值,只要你代码里对它有赋值操;如果没有赋值操作,int会被设为0】

- 【实验证明,不需要显示访问到对象,静态变量就会被处理。顺序为:声明时自带的赋值操作 -> 静态构造函数 -> 程序入口Main

- 总结来说,静态成员变量是在程序入口前,所有的初始赋值以完成;如果有赋值则赋值,否则给缺省值。

2. (被谁访问)可以被静态方法和非静态方法所访问

 

静态方法

1. 是一种特殊的成员方法,不属于类的某一个具体的实例,它属于类本身。

2. (不能访问什么)静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等

3. (能访问什么)静态成员函数仅能访问静态的数据成员,不能访问非静态的数据成员,也不能访问非静态的成员函数,这是由于静态的成员函数没有this指针。

 

非静态方法

1. (能访问什么)所有的静态方法,静态成员,非静态方法,非静态成员

 

访问关系总结

  静态方法 静态成员 (在程序启动时最早被赋值) 非静态方法 非静态成员(在创建类对象后被赋值)
 静态方法 Y Y N N
 非静态方法 Y Y Y Y
     
     

 

静态构造函数

  • 用于对静态字段、只读字段等的初始化。              
  • 添加static关键字,不能添加访问修饰符,因为静态构造函数都是私有的。      
  • 类的静态构造函数在给定应用程序域中至多执行一次:只有创建类的实例或者引用类的任何静态成员才激发静态构造函数 [实验看,不访问也会处理]
  • 静态构造函数是不可继承的,而且不能被直接调用。            
  • 如果类中包含用来开始执行的 Main 方法,则该类的静态构造函数将在调用 Main 方法之前执行。任何带有初始值设定项的静态字段,则在执行该类的静态构造函数时,先要按照文本顺序执行那些初始值设定项。 
  • 如果没有编写静态构造函数,而这时类中包含带有初始值设定的静态字段,那么编译器会自动生成默认的静态构造函数。

Sample Program

===============================================================

using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace ConsoleApplication1 {     class StaticTest     {

        static int x=10;         int y = 0;

        static StaticTest()         {             x = 15;         }

        public StaticTest()         {             x = 20;         }         public void SetX(int a)         {             x = a;         }

        public void SetY(int a)         {             y = a;         }         public static void Print()         {             Console.WriteLine("x = {0}", x);         }         static void Main(string[] args)         {             //StaticTest st = new StaticTest();             Console.WriteLine("Hello World!");         }     } }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值