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

 更新时间:2020年6月25日 11:42  点击:1551

静态类 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!

[!--infotagslink--]

相关文章

  • C#中静态的深入理解

    这篇文章详细的介绍了C#中的静态,有需要的朋友可以参考一下...2020-06-25
  • 浅析C#中静态方法和非静态方法的区别

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向大家介绍下C#中静态方法和非静态方法的区别,一起看看吧...2020-06-25
  • 西部数码空间伪静态配置方法图解

    今天在使用西部数码空间时发现里面有很多定义好的伪静态规则了,下面我来给大家介绍一下在后面主机面板中配置使用伪静态功能吧,希望文章对各位会带来帮助。...2016-10-10
  • Apache在httpd.conf配置文件中设置伪静态(Rewrite)

    .htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可 以允许用户通过.htaccess文件自...2016-01-28
  • Spring-AOP 静态正则表达式方法如何匹配切面

    这篇文章主要介绍了Spring-AOP 静态正则表达式方法如何匹配切面的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-19
  • Win7/Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法

    Win7Windows2003下IIS6.0、IIS7.5的伪静态组件安装和伪静态配置方法,还包括常用的伪静态规则使用方法...2016-01-27
  • php 类的静态变量的初始化

    共有的成员还有办法解决,例如: class A { static public $child; } A::$child = new B(); 对于私有的成员似乎就没有什么干净的方法了,只能这样做: class A {...2016-11-25
  • iis伪静态中文url出现乱码的解决办法

    这篇文章主要介绍了iis伪静态中文url出现乱码的解决办法,需要的朋友可以参考下...2017-07-06
  • apache .htaccess 伪静态页

    apache .htaccess 伪静态页 静态页的地址: http://211.166.45.10/company/new/new_10000.html 指定的动态地址:php?id=10000">http://211.166.45.10/company/new.php?id=...2016-01-28
  • C++中静态初始化数组与动态初始化数组详解

    今天小编就为大家分享一篇C++中静态初始化数组与动态初始化数组详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-25
  • 如何让iis支持伪静态和增加伪静态规则方法

    如果想让iis支持伪静态就必须 先安装php教程 for iis http://www.php.net/downloads.php 然后安装 微软的 urlrewrite http://www.iis.net/download/urlrewrite 下载...2016-09-20
  • PHP静态分析与跨站脚本检测

    最近在看PHP静态分析与跨站脚本检测的东西,用的是维也纳大学一个博士生做出来的Pixy,这个东西是开源的,而且也作了好几年了,功能逐渐增强。现在这个3.0.3版本里...2016-11-25
  • C#中实现伪静态页面两种方式介绍

    伪静态技术的诞生,带动了于搜索引擎友好C#中实现伪静态页面有两种方式,本文将一一详解,感兴趣的朋友可以参考下,希望本文对你学习伪静态有所帮助...2021-09-22
  • python编程普通及类和静态方法示例详解

    普通方法会将实例传入方法当中(通常用self表示),类方法会将类传入方法当中(通常用cls表示),静态方法中传入与类无关的变量。下面将举例详细说明...2021-10-12
  • apache下开启.htaccess 伪静态支持配置方法

    1、首先确定Apache是否加载了Mod_rewrite 模块 方法: 检查 httpd.conf 中是否存在以下两段代码 (具体路径可能会有所不同,但形式基本是一样的): (一)LoadModule rewrite_modu...2016-01-28
  • 伪静态几种做法

    很多seoer都说把文件做成静态这样对搜索引擎是最好的了,但是像我们这些买别人的虚拟空间,是有限的但是又想以静态形式,如果生成真正的静态如果你的网站有1000000篇文件...2016-11-25
  • C++中静态成员函数访问非静态成员的实例

    这篇文章主要介绍了C++中静态成员函数访问非静态成员的实例的相关资料,需要的朋友可以参考下...2020-04-25
  • apache+php 伪静态写法与iis+php 伪静态区别

    二者没有多大的区别,特别是在前段,后段把以前apache .php?id=$1在iis改成了php\\?id=$1[N,I]写法。 apache+php教程 伪静态写法与iis+php 伪静态区别 这是apache+p...2016-09-20
  • 什么情况下应该把网站的页面变成静态网页发布

    WEB界面静态化进入最后的环节,可以令管理员分门分类分子网地选择项目进行静态化,主要是首页,效率很高,按由XML设定的静态化项目,一个网站管理员可以在几分钟内完成上...2016-09-20
  • php伪静态之APACHE篇

    1.检测Apache是否支持mod_rewrite通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。...2014-06-07