คอนสตรักเตอร์แบบสแตติก
กำหนดค่าเริ่มต้นให้สถานะแบบสแตติกเพียงครั้งเดียว
คอนสตรักเตอร์แบบสแตติก เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คอนสตรักเตอร์สแตติกคืออะไร
คอนสตรักเตอร์สแตติกใช้เริ่มต้นข้อมูลสแตติกของคลาส คอนสตรักเตอร์นี้จะทำงานโดยอัตโนมัติครั้งเดียวก่อนที่คลาสจะถูกใช้งานครั้งแรก และคุณจะไม่เรียกใช้โดยตรง
using System;
class App
{
public static string Version;
static App()
{
Version = "1.0.0";
Console.WriteLine("Static constructor ran");
}
}
class Program
{
static void Main()
{
Console.WriteLine(App.Version);
}
}กฎไวยากรณ์
คอนสตรักเตอร์สแตติกใช้คีย์เวิร์ด static ใช้ชื่อเดียวกับคลาส รับไม่มีพารามิเตอร์ และไม่มีตัวระบุการเข้าถึง
using System;
class Config
{
public static int MaxUsers;
static Config()
{
MaxUsers = 100;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Max: " + Config.MaxUsers);
}
}ทำงานเพียงครั้งเดียวอย่างแน่นอน
ไม่ว่าคุณจะใช้คลาสกี่ครั้ง คอนสตรักเตอร์สแตติกจะทำงานเพียงครั้งเดียว คือครั้งแรกที่จำเป็นต้องใช้
using System;
class Counter
{
public static int Instances;
static Counter()
{
Console.WriteLine("Initializing static state");
Instances = 0;
}
public Counter() { Instances++; }
}
class Program
{
static void Main()
{
new Counter();
new Counter();
Console.WriteLine("Instances: " + Counter.Instances);
}
}คอนสตรักเตอร์นี้เริ่มทำงานเมื่อใด
สภาพแวดล้อมขณะทำงานจะเรียกใช้คอนสตรักเตอร์นี้ก่อนการเข้าถึงสมาชิกสแตติกใด ๆ ครั้งแรก OR ก่อนการสร้างอินสแตนซ์ครั้งแรก แล้วแต่ว่าเหตุการณ์ใดเกิดขึ้นก่อน
using System;
class Lazy
{
public static string Data;
static Lazy()
{
Console.WriteLine("Triggered now");
Data = "ready";
}
}
class Program
{
static void Main()
{
Console.WriteLine("Before access");
Console.WriteLine(Lazy.Data);
}
}การเริ่มต้นข้อมูลสแตติกที่ซับซ้อน
ใช้คอนสตรักเตอร์สแตติกเมื่อฟิลด์สแตติกต้องใช้ตรรกะจริงในการตั้งค่า ไม่ใช่เพียงค่าตามตัวอักษรอย่างง่าย
using System;
using System.Collections.Generic;
class Lookup
{
public static Dictionary<int, string> Table;
static Lookup()
{
Table = new Dictionary<int, string>();
for (int i = 1; i <= 3; i++)
Table[i] = "Item" + i;
}
}
class Program
{
static void Main()
{
Console.WriteLine(Lookup.Table[2]);
}
}คอนสตรักเตอร์สแตติกเทียบกับตัวเริ่มต้นฟิลด์
ค่าที่ไม่ซับซ้อนสามารถใช้ตัวเริ่มต้นแบบเขียนในบรรทัดเดียวได้ ส่วนคอนสตรักเตอร์สแตติกเหมาะกับการตั้งค่าที่ต้องใช้คำสั่ง วนรอบ หรือการจัดการข้อผิดพลาด
using System;
class Settings
{
public static int Simple = 10; // inline initializer
public static int Computed; // needs logic
static Settings()
{
Computed = Simple * Simple;
}
}
class Program
{
static void Main()
{
Console.WriteLine(Settings.Simple + ", " + Settings.Computed);
}
}ไม่อนุญาตให้มีพารามิเตอร์
เนื่องจากสภาพแวดล้อมขณะทำงานเป็นผู้เรียกใช้ คอนสตรักเตอร์สแตติกจึงรับอาร์กิวเมนต์ไม่ได้ อินพุตทั้งหมดต้องมาจากข้อมูลสแตติกอื่นหรือค่าคงที่
using System;
class Clock
{
public static int StartHour;
static Clock()
{
StartHour = 9;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Start: " + Clock.StartHour);
}
}การใช้คอนสตรักเตอร์สแตติกและอินสแตนซ์ร่วมกัน
คลาสหนึ่งสามารถมีคอนสตรักเตอร์ทั้งสองแบบได้ คอนสตรักเตอร์สแตติกจะทำงานครั้งเดียวสำหรับชนิดข้อมูลนั้น ส่วนคอนสตรักเตอร์อินสแตนซ์จะทำงานสำหรับออบเจ็กต์ทุกตัว
using System;
class Game
{
public static string Title;
public int Score;
static Game()
{
Title = "Coddy Quest";
}
public Game(int score)
{
Score = score;
}
}
class Program
{
static void Main()
{
var g = new Game(50);
Console.WriteLine(Game.Title + " score " + g.Score);
}
}การรับรองลำดับการทำงาน
คอนสตรักเตอร์สแตติกจะทำงานเสร็จก่อนบล็อกคำสั่งของคอนสตรักเตอร์อินสแตนซ์ใด ๆ ที่เป็นตัวกระตุ้นให้คอนสตรักเตอร์สแตติกทำงานเสมอ ดังนั้น state สแตติกจึงพร้อมใช้งานอยู่เสมอ
using System;
class Service
{
public static string Endpoint;
static Service()
{
Endpoint = "https://api.example.com";
}
public Service()
{
Console.WriteLine("Using " + Endpoint);
}
}
class Program
{
static void Main()
{
new Service();
}
}ใช้เท่าที่จำเป็น
คอนสตรักเตอร์สแตติกจะเพิ่มการตรวจสอบหนึ่งครั้งก่อนใช้คลาส และอาจทำให้ประสิทธิภาพลดลงหากใช้มากเกินไปหรือหากเกิดข้อผิดพลาด ควรทำให้คอนสตรักเตอร์เหล่านี้สั้นและเชื่อถือได้
using System;
class Cache
{
public static int[] Data;
static Cache()
{
Data = new int[] { 2, 4, 6, 8 };
}
}
class Program
{
static void Main()
{
Console.WriteLine(Cache.Data[3]);
}
}นำทุกอย่างมารวมกัน
คอนสตรักเตอร์สแตติกเหมาะอย่างยิ่งสำหรับการตั้งค่าข้อมูลที่ใช้ร่วมกันและอ่านอย่างเดียวเพียงครั้งเดียว เช่น ตารางค้นหาหรือการกำหนดค่าที่โหลดจากค่าคงที่
using System;
using System.Collections.Generic;
class Currency
{
public static Dictionary<string, string> Symbols;
static Currency()
{
Symbols = new Dictionary<string, string>
{
["USD"] = "$",
["EUR"] = "E",
["JPY"] = "Y"
};
}
}
class Program
{
static void Main()
{
Console.WriteLine("USD symbol: " + Currency.Symbols["USD"]);
}
}ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจเกี่ยวกับคอนสตรักเตอร์สแตติก
ทบทวน
คอนสตรักเตอร์สแตติกใช้ static ClassName() โดยไม่มีพารามิเตอร์และไม่มีตัวระบุการเข้าถึง คอนสตรักเตอร์นี้ทำงานครั้งเดียวโดยอัตโนมัติก่อนที่คลาสจะถูกใช้งานครั้งแรก เพื่อเริ่มต้น state สแตติกที่ต้องใช้ตรรกะจริง ควรใช้เท่าที่จำเป็นสำหรับการตั้งค่าข้อมูลที่ใช้ร่วมกันเพียงครั้งเดียว
using System;
class Demo
{
public static int Value;
static Demo() { Value = 42; }
}
class Program
{
static void Main()
{
Console.WriteLine(Demo.Value);
}
}คำถามที่พบบ่อย
บทเรียน “คอนสตรักเตอร์แบบสแตติก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คอนสตรักเตอร์แบบสแตติก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คอนสตรักเตอร์แบบสแตติก”
กำหนดค่าเริ่มต้นให้สถานะแบบสแตติกเพียงครั้งเดียว คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “คอนสตรักเตอร์แบบสแตติก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดคอนสตรักเตอร์
- การเชื่อมโยงคอนสตรักเตอร์ด้วย this
- ตัวกำหนดค่าเริ่มต้นของออบเจ็กต์และคอลเลกชัน
- คอนสตรักเตอร์แบบสแตติก