C#静态成员和非静态成员
一、C#静态成员和非静态成员
1. C#静态成员和非静态成员
当类中的某个成员使用static修饰符时,就会被声明为静态成员。类中的成员要么是静态成员,要么是非静态成员。一般情况下,静态成员属于整个类所有,被该类的所有实例所共享。而非静态成员则属于类的实例——对象所有,只被该实例所共享。
因此,对于类的静态成员来说,无论这个类创建了多少个副本(实例),一个静态成员只占一块内存区域,而不会重复创建多个副本。同一静态成员在不同的实例中的值是相同的。
在静态函数中不能使用非静态成员,如非静态变量、非静态函数等。
而对于类的非静态成员来说,每创建一个类的实例,都会在内存中为非静态成员开辟一块区域,创建多少实例,就会开辟多少块区域。同一非静态成员在不同的实例中的值可能是不同的。
所以,静态成员占用的内存区域最少。
2. 访问静态成员的方式
可以通过“类名+圆点(.)+成员名”的方式来访问静态成员,不需要创建类的实例。
二、示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Test
{
class Program
{
class classTest
{
public static String staticStr = "class"; // 静态成员
public String notstaticStr = "obj"; // 非静态成员
}
static void Main(string[] args)
{
// C#静态成员和非静态成员-www.baike369.com
// 静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值
Console.WriteLine("classTest's staticStr:{0}", classTest.staticStr);
classTest obj1 = new classTest();
obj1.notstaticStr = "obj1";
classTest obj2 = new classTest();
obj2.notstaticStr = "obj2";
// 非静态变量通过实例(对象)进行访问,不同实例(对象)的同一非静态
// 变量可以有不同的值
Console.WriteLine("obj1's notstaticStr:{0}", obj1.notstaticStr);
Console.WriteLine("obj2's notstaticStr:{0}", obj2.notstaticStr);
Console.ReadLine();
}
}
}
运行结果:
classTest's staticStr:class
obj1's notstaticStr:obj1
obj2's notstaticStr:obj2
最新文章
- Git 子模块 - submodule
- Android listview和gridview以及view的区别
- 为什么说invalidate()不能直接在线程中调用
- centos6.4安装Apache+MySQL+PHP
- inline-block 左边固定,右边自适应
- iOS开发——UI基础-KVO
- python学习第二天第二部分
- SqlServer2008 数据库可疑
- Codeforces Round #274 (Div. 2) B. Towers
- ConfigurationManager 缓存刷新
- 给ThinkPHP5增加验证码功能
- CXF_Spring_Rest
- 如何增强ArcGIS插值图出图效果
- Spring01-IOC
- 使用Ext JS,不要使用页面做组件重用,尽量不要做页面跳转
- C# -- 结构、访问修饰符
- Qt5OpenGL.顶点像素大小设置
- str_replace中的匹配空白符,必须用双引号
- DLL对象类型转换
- ThreadLocal是否会引发内存泄露的分析 good
热门文章
- [转]jQuery: get table column/row index remove table column (by column number)
- Neutron命令测试5
- MATLAB线性回归方程与非线性回归方程的相关计算
- 基于log4net自定义异步logging组件
- Video 视频播放防作弊和禁止下载
- 使用InstallShield打包VS程序
- AutoResetEvent 2
- synchronized + volatile + ThreadLocal
- 服务器断电后 redis重启后启动不起来
- Maven,SVN,快捷键,数据库等