一、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

C#静态成员和非静态成员的更多相关文章

  1. C++静态成员和非静态成员的区别和使用

    C++静态成员和非静态成员的区别和使用 对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员和静态方法. 只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进 ...

  2. c++ 类静态成员、非静态成员初始化

    1.静态成员初始化(不能在构造函数或初始化列表中初始化) 1.1 所有静态成员都可以在类定义之外初始化(通用),如下所示 class test { public: static int a; }; ; ...

  3. C#中的静态成员和非静态成员

    C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用上会有什么不同呢? 让我们来看看最直观的差别:使用了static 修饰符的方法为静态方法,反之则是非静态方法 ...

  4. java字段中初始化的规律与如何用静态成员函数调用非静态成员

    java字段中初始化的规律: 执行以下代码,出现的结果是什么? class InitializeBlockClass{ { field=200; } public int field=100; pub ...

  5. C#面向对象中类的静态成员与非静态成员的区别

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

  6. PHP静态成员变量和非静态成员变量

    数据成员可以分静态变量.非静态变量两种. 静态成员: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...

  7. C++类中的静态成员变量和静态成员函数的作用

    数据成员可以分为静态变量.非静态变量两种. 静态成员:静态类中的成员加入static 修饰符,即是静态成员,可以使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

  8. C++ 类的静态成员变量及静态成员函数

    ps:下面所说 成员=成员变量+成员函数: 作用 由于对象与对象之间的成员变量是相互独立的.所以要想共用数据,则需要使用静态成员和静态函数. 空间分配 静态成员是在程序编译时分配空间,而在程序结束时释 ...

  9. C++静态成员变量和静态成员函数

    数据成员可以分静态变量.非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配 ...

随机推荐

  1. Android Studio中导入v4,v7和recyclerview-v7包的方法

    概述 Android Studio中新建工程中会默认导入v7的包,即在gradle中默认配置了com.android.support:appcompat-v7:x.x.x的依赖.但是不会默认为我们配置 ...

  2. Cloudera Manager卸载笔记

    1.通过管理平台分别停止组件服务和Cloudera Management Service 2.通过管理平台注销并移除Parcles (在控制台注销并移除,无论是安装的Parcles还是未安装的Parc ...

  3. Tomcat安装和配置过程

    tomcat的下载.配置.启动方法.网上教程乱七八糟,还是自己mark一下备用吧. 一.官网下载Tomcat的压缩包 Tomcat是Apache软件基金会的一个开源项目.登录Apache官网即可找到下 ...

  4. PHP算法——生成唯一字符串

    经常遇到忘记密码的情况,点击一下忘记密码,然后收到更改密码的链接,连接中往往都会有一段很长而且很乱的字符串.试想一下,如果出现了重复的字符串,那岂不是把别人的密码给重置了? 所以产生唯一数对于网站的安 ...

  5. 同源策略引发对跨域jsonp跨域的理解

    一,同源策略其实网络的安全基石,既:http://www.baidu.com:80协议(http或者HTTPS或者ws或者wss).域名(www.baidu.com).端口(默认80,可以不写 htt ...

  6. Android下常见的内存泄露 经典

    转自:http://www.linuxidc.com/Linux/2011-10/44785.htm 因为Android使用Java作为开发语言,很多人在使用会不注意内存的问题. 于是有时遇到程序运行 ...

  7. SVN仓库连同版本信息迁移新服务器的步骤

    SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bi ...

  8. C#天气预报程序

    首先要引用这个服务,http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 出现对话框后,把中央气象的服务网址添加到里面 选择高级, 添 ...

  9. checkBox 全选、全不选、反选

    checkBox的使用: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  10. ACM-树重心的性质及动态维护

    本文转自http://fanhq666.blog.163.com/blog/static/81943426201172472943638/ 求树重心的方法:(NlogN) http://www.cnb ...