• 将不确定变为确定~static被翻译成静态,你是否赞同


    回到目录

    C#中有一个修饰符,它叫static,国人把它叫静态化的,它可以去修饰类,方法,属性,事件等元素。

    在100%的教科书中把static叫做静态的,对于原本就很抽象的编程语言来说,无疑使它更加抽象化了,啥是静态,静止不动?有点意思。

    先看一个static的应用场合代码片断:

    一 静态类:它在程序初始化时自动被执行

    1 public static class ConnectionFactory
    2  {...}

    二 静态方法和静态属性:它在类被第一次使用或第一次被实例化时,被执行

    1 public static string Conn=WebConfig.SQLConn;
    2 public static DataContext Instance()
    3 {...}

    三 静态事件,它与静态属性和方法一样的执行机制

    1 public static event StartEventHandler Start;

    事实上,以上三点是书本上经常介绍的,但我不认为它是一种学习static的最好方式,看一下我对static的理解:

     它是类本身的东西,与实例无关,即类的属性,类的方法,类的事件等等,它与实例无关,也就是实例A与实例B,对于public static修饰符下的属性,方法,事件是平等的,同时也是共享的。

    如果在一个类型B中对StaticA类中的静态属性Num赋值,它会对所有类中使用Num属性的位置进行修改(事实上,在内在中,它只是一个地址),你的代码可能是这样:

     1     /// <summary>
     2     /// 测试类
     3     /// </summary>
     4     public class StaticA
     5     {
     6         /// <summary>
     7         /// 静态属性
     8         /// </summary>
     9         public static string Num = "类的属性";
    10     }

    在其它类中,有对Num属性的使用:

    1  public class A
    2     {
    3         public string ANum = StaticA.Num;
    4     }
    5     public class B
    6     {
    7         public string BNum = StaticA.Num;
    8     }

    而当我们在程序的任何一处修改Num的值时,以上A和B中的实例属性ANum和BNum也就会发生变化了,呵呵。

    看一下,由static实现的单件模式吧(类只能有一个实例)

     1  public sealed class Singleton
     2     {
     3         // 静态,易变的对象
     4         private static volatile Singleton instance = null;
     5         // Lock对象,线程安全所用
     6         private static object syncRoot = new Object();
     7 
     8         private Singleton() { }
     9 
    10         public static Singleton Instance
    11         {
    12             get
    13             {
    14                 if (instance == null)
    15                 {
    16                     lock (syncRoot)
    17                     {
    18                         if (instance == null)
    19                             instance = new Singleton();
    20                     }
    21                 }
    22 
    23                 return instance;
    24             }
    25         }
    26     }

    总结一下static的技术要点:

    1 static与具体实例无法,属性类本身的东西,而不加static是与当前实例(new ())有关的个性化对象

    2 static叫它静态对象不如叫它全局对象或类自身对象

    3 static有时可以提高系统性能,即,在为对象开辟一块内存空间

    回到目录

  • 相关阅读:
    docker mysql
    dotnet core webapi +vue 搭建前后端完全分离web架构
    npm run dev
    docker pureftpd
    虚拟主机连接FTP发送"AUTH TLS"命令后提示“无法连接到服务器”
    [mobile开发碎碎念]手机页面上显示PDF文件
    T-SQL注意事项(1)——SET NOCOUNT ON的去与留
    Tomcat 部署多个项目出现错误
    十进制小数和二进制小数之间的转换
    sed 替换多个空格为一个
  • 原文地址:https://www.cnblogs.com/lori/p/2543137.html
Copyright © 2020-2023  润新知