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

所属分类: 软件编程 / C#教程 阅读数: 100
收藏 0 赞 0 分享

静态类 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);
         }
     }

运行结果


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

Fighting like Allen Iverson! Never never give up!

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多