当前位置:  编程技术>.net/c#/asp.net

深入理解c# static 静态数据成员和方法

    来源: 互联网  发布时间:2014-08-30

    本文导语:  静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域。 1)、静态成员属于类所有,非静态成员属于类的实例所有。 2)、每创建一个类的实例,都市在内存中为非静...

静态成员属于类所有,为各个类的实例所公用,无论类创建了几多实例,类的静态成员在内存中只占同一块区域。
1)、静态成员属于类所有,非静态成员属于类的实例所有。
2)、每创建一个类的实例,都市在内存中为非静(动)态成员新分派一块存储;

静态数据成员区别于动态数据成员,静态变量并不是稳定的,只是静态变量在声明的时候不管有没有赋值,都市凭据它的类型分派对应的内存空间,他的可访问性和作用区间与动态变量是一样的

1,静态数据成员:
说明:
使用static关键字说明的数据成员被称为静态数据成员。

意义:
静态数据成员所属类的所有实例都共享相同的静态成员值。

访问:
实际上,静态成员并不属于某个实例,静态成员属于类。因此,在使用静态成员的时候,不克使用实例名.静态成员名的形式,而应该使用类名.静态成员名来进行那个访问。原因是因为静态变量没有this指针,只能通过类名引用。

内存分派:
分派时间点 -> 静态数据成员与全局变量相似,它的内存分派产生在应用程序类实例化的时候,即程序运行期间,其释放在程序运行结束时,区别在于其作用域差别。静态数据成员只作用在本文件内。
分派地点 -> 静态变量和要领在静态存储区分派内存,而非静态的在栈区或者堆上分派内存 。

2,静态要领:
说明:
使用static关键字声明的要领被称为静态要领。

访问:
同样是通过类名.要领名来访问。

简述访问规则:
a.静态要领是不属于特定东西的要领,静态要领可以访问静态成员变量,静态要领不可以直接访问实例变量.
假如在静态要领中访问非静态的成员,编译器不会去判定你是通过类直接挪用还是通过东西挪用,一概认为是非法的,因为他不克确定这个非静态的成员是否被分派了内存,他也懒得去确定。
b.假如静态要领要访问实例变量,只有一种要领:
可以在实例函数挪用的情况下,实例变量做为参数传给静态要领。

源代码如下:
 

namespace Test
...{
public class TT
...{
private int num = 10;
public void Method1()
...{
TT.Method2(num); //实例函数挪用,将实例变量num作用参数通报给了静态要领Method2.
}
public static void Method2(int param) //静态要领
...{
param = param * param;
Console.WriteLine(param);
}
public static void Main()
...{
TT.Method2(10);
TT test = new TT();
test.Method1();
}
}
}
 

即静态要领可以接受实例变量类型的参数,然后用实例要领包裹静态要领,再通报实例变量到静态要领中。
c.静态要领也不克直接挪用实例要领,可以间接挪用,首先要创建一个类的实例,然后通过这一特定东西来挪用实例要领。
即,静态要领要挪用实例要领,只能通过接受东西类型的参数,在要领体内,用东西名.要领名来挪用实例要领。
例如:
 

代码示例:
class nbr
...{
//class body;
public void method_nbr()
...{
//method_nbr body;
}
}
class Myapp
...{
static void Myapp_method(nbr object1)
...{
object1.method_nbr();
}
public static void Main()
...{
nbr myobj = new nbr();
Myapp_method(myobj);
}
}

C# 静态成员和方法的学习小结

数据成员:
数据成员可以分静态变量、实例变量两种.
静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.

实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.

函数成员:
方法可以主要分为静态方法,实例方法

静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。

实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。


    
 
 

您可能感兴趣的文章:

  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • 深入C# 内存管理以及优化的方法详解
  • 深入c# Func委托的详解
  • C# 多态性的深入理解
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  • 深入C# winform清除由GDI绘制出来的所有线条或图形的解决方法
  • 深入Unix时间戳与C# DateTime时间类型互换的详解
  • C# interface与delegate效能比较的深入解析
  • C#中IList<T>与List<T>的区别深入解析
  • 深入分析C#中WinForm控件之Dock顺序调整的详解
  • C#中静态的深入理解
  • C#泛型约束的深入理解
  • C#之CLR内存深入分析
  • 深入解析c#中枚举类型的定义与使用
  • 深入c#绘制验证码的详解
  • 深入c# 类和结构的区别总结详解
  • 深入c# GDI+简单绘图的具体操作步骤(一)
  • 深入探讨C#中的结构struct
  • 深入理解C# abstract和virtual关键字
  • c#方法中调用参数的值传递方式和引用传递方式以及ref与out的区别深入解析
  • java 静态代理 动态代理深入学习
  • 全局静态存储区、堆区和栈区深入剖析
  • 深入理解C++的动态绑定与静态绑定的应用详解
  • 深入C#实例成员和静态成员详解
  • C++ 类的静态成员深入解析
  • 深入C#中静态成员和实例变量详解
  • 深入探讨Linux静态库与动态库的详解(一看就懂)
  • Java UrlRewriter伪静态技术运用深入分析
  • 深入解析java中的静态代理与动态代理
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 深入理解linux内核
  • 问一个《深入理解计算机系统》中的问题
  • 深入理解PHP内核 TIPI
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)
  • 有人读完《深入理解linux内核》吗?
  • 求一起看《深入理解linux内核》
  • 深入理解Java对象实例生成的例子
  • 深入理解计算机系统一书的一个问题
  • java父类和子类初始化顺序的深入理解
  • 深入Ref,Out的理解及其使用
  • 深入理解Oracle数据库的启动和关闭
  • 《现代操作系统》和《深入理解计算机系统》
  • CS:APP深入理解计算机系统练习题-【ELF文件的符号表相关】
  • 深入理解结构体中占位符的用法
  • 求支持,深入理解LINUX内核
  • 深入理解Activity之间的数据传递
  • 深入理解linux内核第三版中文版 不够可以再加分
  • 基于Java Tomcat和激活MyEclips的深入理解
  • Android开发之文件操作模式深入理解
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3