C#静态
静态方法与非静态方法的相互调用
静态方法是属于类的;
即静态方法是随着类被加载而存在的,在加载类时程序就会为静态方法分配内存;
非静态方法是属于对象的;
即非静态方法是随着对象创建而存在的,在对象创建时程序才会为其分配内存空间;对象是在类加载之后才被创建出来
即静态方法要早于非静态方法在内存中分配空间,当静态方法在内存中存在时,非静态方法未必存在于内存;所以在静态方法中不能调用非静态方法;因为静态方法不能调用一个不存在的方法;反之,非静态方法就可以调用静态方法。
补充:调用和访问两个概念
访问:不需要创建对象
调用:需要创建对象
1:静态方法只能访问静态-------------这里是访问,不是调用,
2:非静态方法可以访问静态,也可以访问非静态-------------这里也是访问,不是调用
3:静态方法可以通过类名.直接被调用,也可以通过对象来被调用-----这里是调用,不是访问
4:而非静态方法只能通过对象来调用-----这里也是调用,不是访问
main函数是静态的,所以只能访问静态-----这里也是访问,不是调用
静态构造函数
- 静态构造函数在类型的第一次使用时被调用;且只调用一次。
- 静态构造函数先初始化类型中的静态成员。
- 静态构造函数不允许添加访问修饰符,且必须无参数
例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace A_Test
{
class Program
{
static void Main(string[] args)
{
B b1 = new B();
}
}
class A
{
public A(string str)
{
Console.WriteLine(str);
}
}
class B
{
static A a1 = new A("a1");
A a2 = new A("a2");
static B()
{
a1 = new A("a3");
}
public B()
{
a2 = new A("a4");
}
}
}
//输出:
a1
a3
a2
a4