理解:静态成员属于类所有,为各个类的实例所公用,与实例无关,需要全局共享的属性或者方法定义成静态的
C#静态成员:
1、静态成员属于类所有,故用类名调用,非静态成员属于类的实例所有,用实例名调用
2、非静态成员有一片固定的空间,而每创建一个类的实例,都会在内存中为非静态成员新分配一块存储;
C#静态方法
1、C#静态方法属于类所有,故用类名调用
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员。
因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存,
静态方法、静态字段
namespace _2_静态_非静态方法
{
class Program
{
static void Main(string[] args)
{
Person.name = "key"; //用类名调用静态字段、方法
Person.show1("哈哈哈哈哈");
Console.WriteLine("================");
Person per1 = new Person();
per1.age = 19; //用实例名调用非静态字段、方法
per1.show2("呵呵呵呵呵呵呵呵");
Console.ReadKey();
}
}
class Person
{
public static string name; //静态字段
public int age; //非静态字段
public static void show1(string str) //静态方法
{
Console.WriteLine(str);
Console.WriteLine(name); //可以调用静态字段,不能调用非静态字段
}
public void show2(string str) //非静态方法
{
Console.WriteLine(str);
Console.WriteLine(name+"今年"+age.ToString()+"岁");
}
}
}
==================================
静态类
namespace 静态类
{
class Program //静态类的所有成员也都是静态的,作用就是建一个数学方法和值的数学库
{
static void Main(string[] args)
{
int val = 3;
Console.WriteLine("{0} is odd is {1}",val,MyMath.IsOdd(val));
Console.WriteLine("{0}*2={1}",val,MyMath.Times2(val));
}
}
static public class MyMath
{
public static float PI = 3.14f;
public static bool IsOdd(int x)
{
return x % 2 == 1;
}
public static int Times2(int x)
{
return 2*x;
}
}
}