首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 靜態字段與實例字段深度解析

     編輯:關於C語言

核心區別

特性靜態字段 (static)實例字段
歸屬類本身具體對象實例
內存應用程序域級,僅一份每個實例獨立一份
訪問方式類名.字段名實例.字段名
生命周期程序運行全程隨實例創建/銷毀

代碼示例

public class Program
{
    private static int staticField = 0;   // 靜態字段
    private int instanceField = 0;        // 實例字段

    static void Main()
    {
        Program p = new Program();
        Console.WriteLine(p.instanceField);  // 0 - 通過實例訪問實例字段
        Console.WriteLine(Program.staticField); // 0 - 通過類名訪問靜態字段
    }
}

readonly 關鍵字詳解

  • 用於聲明只讀字段,僅能在聲明時或構造函數中賦值。
  • 區別於 const:const 編譯期常量,隱含 static;readonly 運行時常量,可為實例字段,構造函數可賦值不同值。

readonly 示例


public class Demo
{
    private readonly int initOnly = 0;      // 聲明時賦值
    private readonly int ctorOnly;          // 僅構造函數賦值

    public Demo(int value)
    {
        ctorOnly = value;   // 合法:構造函數中賦值
    }

    public void TryModify()
    {
        // initOnly = 10;  // 編譯錯誤 CS0191
        // ctorOnly = 20;  // 編譯錯誤
    }
}

進階:靜態構造函數與 readonly


public class Config
{
    public static readonly string ConnectionString;

    static Config()
    {
        // 運行時一次性初始化,可讀取配置文件、環境變量等
        ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
    }
}

最佳實踐

  • 優先使用 readonly 替代 const,除非值絕對不變(如 Math.PI)。
  • 靜態字段慎用可變引用類型(如 List),多線程環境下需鎖定或使用 Concurrent 集合。
  • 實例字段封裝為屬性,控制訪問邏輯與驗證。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved