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