.NET中的静态与非静态的区别分析
.NET中的静态与非静态的区别分析
发布时间:2016-12-28 来源:查字典编辑
摘要:静态类vs普通类静态类与普通类的区别有以下几点:1)静态类无法实例化而普通类可以;2)静态类只能从System.Object基类继承;普通可...

静态类 vs 普通类

静态类与普通类的区别有以下几点:

1)静态类无法实例化而普通类可以;

2)静态类只能从System.Object基类继承;普通可以继承其它任何非static和非sealed类,但也只能继承一个类;

3)静态类不能继承接口;普通类可以继承多个接口;

4)静态类只能包含静态成员;普通类可以包含静态和非静态成员;

5)静态类不能作为字段,方法参数和局部变量使用;普通类可以;

静态类的意义:

可以用静态类封装一组不与任何对象相关联的方法,如Math类,Console类。

静态构造函数 vs 实例构造函数

静态构造函数与实例构造函数的区别有以下几点:

1)静态构造函数属于类,在第一次用到该类时执行且只执行一次;实例构造函数属于对象,在每次初始化一个新对象的时候都会执行;

2)静态构造函数只能定义一次,且不能包含参数;实例构造函数可以定义重载,且可以包含参数;

3)静态构造函数只能访问类型的静态字段;实例构造函数可以访问类型的静态和非静态字段;

4)静态类不能包含访问修饰符,默认为private.

静态构造函数的意义:

设置类型的初始化,例如初始化类型需要的实例对象,为类型的静态字段赋值等。

静态方法 vs 实例方法

静态方法与实例方法的区别有以下几点:

1)静态方法属于类,通过类来调用;实例方法属于对象,通过对象来调用;

2)静态方法不能访问类的非静态成员;

静态方法的意义:

完成一个与特定对象无关的功能。

静态字段 vs 非静态字段

静态字段与非静态字段的区别:

静态字段属于类,通过类来调用;非静态字段属于对象,通过对象来调用。

静态字段的意义:

可以用静态字段来记录一些属于类本身的信息。

代码演示

复制代码 代码如下:

public class Test

{

public int i = 10;

public static int j = 20;

public int k;

public Test()

{

Console.WriteLine("i is a non-static field, its value is {0}", i);

Console.WriteLine("j is a static field, its value is {0}", j);

}

public Test(int k)

{

this.k = k;

Console.WriteLine("i is a non-static field, its value is {0}", i);

Console.WriteLine("j is a static field, its value is {0}", j);

Console.WriteLine("k is a non-static field, its value is {0}", k);

}

static Test()

{

Console.WriteLine("I am a static constructor, I couldn't contain any parameters!");

Console.WriteLine("I couldn't access to the non-static field i, I can only access to the static field j, the value of j is {0}", j);

}

public void Print()

{

Console.WriteLine("I am a instance method, I can access both the non-static field and the static field!");

Console.WriteLine("The value of i is {0} and the value of j is {1}", i, j);

}

public static void StaticPrint()

{

Console.WriteLine("I am a static method, I couldnt access to the non-static field i, I can only access to the static field j, the value of j is {0}", j);

}

}

运行结果

.NET中的静态与非静态的区别分析1

从运行结果可以看出,在Main方法中创建了两个Test对象,静态构造函数只执行了一次,且先于实例构造函数执行,实例构造函数在两次实例化过程中各执行了一次。同时可以看到我们是通过Test.j来调用的j字段,而i字段和k字段的调用则通过Test的两个对象t1和t2调用。同样的,静态方法StaticPrint也是用Test类来调用,而实例方法Print通过Test类的对象来调用。

Fighting like Allen Iverson! Never never give up!

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类