0Pricing
C# Academy · บทเรียน

การกำหนดคอนสตรักเตอร์

สร้างอินสแตนซ์ด้วยคอนสตรักเตอร์ที่รับพารามิเตอร์

การกำหนดคอนสตรักเตอร์ เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวสร้างคืออะไร

ตัวสร้างคือเมธอดพิเศษที่ทำงานเมื่อสร้างออบเจ็กต์ด้วย new ตัวสร้างมีชื่อเดียวกับคลาสและไม่มีชนิดค่าที่ส่งคืน หน้าที่ของมันคือทำให้ออบเจ็กต์อยู่ในสถานะเริ่มต้นที่ถูกต้อง

using System;

class Dog
{
    public Dog()
    {
        Console.WriteLine("A dog was created");
    }
}

class Program
{
    static void Main()
    {
        var d = new Dog();
    }
}

ตัวสร้างที่รับพารามิเตอร์

ตัวสร้างสามารถรับพารามิเตอร์เพื่อให้ผู้เรียกส่งค่าเริ่มต้นเข้ามา นี่เป็นรูปแบบที่ใช้กันมากที่สุดสำหรับกำหนดข้อมูลที่จำเป็น

using System;

class Person
{
    public string Name;
    public int Age;

    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main()
    {
        var p = new Person("Ada", 36);
        Console.WriteLine(p.Name + " is " + p.Age);
    }
}

คีย์เวิร์ด this ในตัวสร้าง

เมื่อชื่อพารามิเตอร์ตรงกับชื่อฟิลด์ ให้ใช้ this. เพื่ออ้างถึงฟิลด์และแยกฟิลด์ออกจากพารามิเตอร์

using System;

class Book
{
    public string Title;

    public Book(string title)
    {
        this.Title = title;
    }
}

class Program
{
    static void Main()
    {
        var b = new Book("C# Basics");
        Console.WriteLine(b.Title);
    }
}

ตัวสร้างเริ่มต้น

หากคุณไม่มีตัวสร้าง คอมไพเลอร์จะจัดเตรียมตัวสร้างที่ไม่มีพารามิเตอร์ให้ แต่ทันทีที่คุณกำหนดตัวสร้างใด ๆ ตัวสร้างเริ่มต้นนั้นจะหายไป เว้นแต่คุณจะเพิ่มกลับด้วยตนเอง

using System;

class Empty
{
    // No constructor written -> compiler supplies a default one
    public int Value;
}

class Program
{
    static void Main()
    {
        var e = new Empty();
        Console.WriteLine("Default Value: " + e.Value);
    }
}

การตรวจสอบในตัวสร้าง

ตัวสร้างสามารถตรวจสอบอาร์กิวเมนต์ เพื่อรับประกันว่าออบเจ็กต์จะไม่ถูกสร้างขึ้นในสถานะที่ไม่ถูกต้อง

using System;

class Account
{
    public decimal Balance;

    public Account(decimal initial)
    {
        if (initial < 0)
            throw new ArgumentException("Initial balance cannot be negative");
        Balance = initial;
    }
}

class Program
{
    static void Main()
    {
        var a = new Account(100m);
        Console.WriteLine("Balance: " + a.Balance);
    }
}

การโอเวอร์โหลดตัวสร้าง

คลาสหนึ่งสามารถมีตัวสร้างหลายตัวที่มีรายการพารามิเตอร์แตกต่างกัน คอมไพเลอร์จะเลือกตัวที่ตรงกับอาร์กิวเมนต์ที่คุณส่ง

using System;

class Point
{
    public int X;
    public int Y;

    public Point()
    {
        X = 0;
        Y = 0;
    }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}

class Program
{
    static void Main()
    {
        var origin = new Point();
        var p = new Point(3, 4);
        Console.WriteLine(origin.X + "," + origin.Y + " | " + p.X + "," + p.Y);
    }
}

การกำหนดค่าพร็อพเพอร์ตีจากตัวสร้าง

ตัวสร้างมักกำหนดค่าให้พร็อพเพอร์ตีที่สร้างอัตโนมัติ รวมถึงพร็อพเพอร์ตีที่กำหนดค่าได้เฉพาะตอนเริ่มต้นหรือมีตัวกำหนดค่าแบบส่วนตัว

using System;

class Product
{
    public string Name { get; }
    public decimal Price { get; }

    public Product(string name, decimal price)
    {
        Name = name;
        Price = price;
    }
}

class Program
{
    static void Main()
    {
        var p = new Product("Pen", 1.50m);
        Console.WriteLine(p.Name + ": " + p.Price);
    }
}

ค่าเริ่มต้นของพารามิเตอร์

พารามิเตอร์ของตัวสร้างสามารถมีค่าเริ่มต้นได้ ทำให้ผู้เรียกละเว้นพารามิเตอร์เหล่านั้นได้ วิธีนี้มักลดความจำเป็นในการสร้างตัวสร้างแบบโอเวอร์โหลดหลายตัว

using System;

class Circle
{
    public double Radius;
    public string Color;

    public Circle(double radius, string color = "black")
    {
        Radius = radius;
        Color = color;
    }
}

class Program
{
    static void Main()
    {
        var c1 = new Circle(2);
        var c2 = new Circle(3, "red");
        Console.WriteLine(c1.Color + " | " + c2.Color);
    }
}

การดำเนินงานในตัวสร้าง

นอกจากกำหนดค่าฟิลด์แล้ว ตัวสร้างยังสามารถคำนวณข้อมูลที่ได้มา หรือเตรียมทรัพยากรที่ออบเจ็กต์ต้องใช้ได้

using System;

class Rectangle
{
    public double Width;
    public double Height;
    public double Area;

    public Rectangle(double w, double h)
    {
        Width = w;
        Height = h;
        Area = w * h;
    }
}

class Program
{
    static void Main()
    {
        var r = new Rectangle(4, 5);
        Console.WriteLine("Area: " + r.Area);
    }
}

ตัวสร้างกับข้อมูลที่จำเป็น

การใส่ค่าที่จำเป็นไว้ในตัวสร้างทำให้ค่าดังกล่าวเป็นข้อบังคับ คุณจะสร้างออบเจ็กต์โดยไม่ส่งค่าเหล่านั้นไม่ได้

using System;

class User
{
    public string Id;
    public string Email;

    public User(string id, string email)
    {
        Id = id;
        Email = email;
    }
}

class Program
{
    static void Main()
    {
        var u = new User("u1", "a@b.com");
        Console.WriteLine(u.Id + " / " + u.Email);
    }
}

การประกอบทุกอย่างเข้าด้วยกัน

ตัวสร้างที่ออกแบบมาอย่างดีจะตรวจสอบข้อมูลขาเข้า กำหนดค่าฟิลด์ และทำให้ออบเจ็กต์พร้อมใช้งานอย่างสมบูรณ์

using System;

class Temperature
{
    public double Celsius { get; }
    public double Fahrenheit { get; }

    public Temperature(double celsius)
    {
        if (celsius < -273.15)
            throw new ArgumentException("Below absolute zero");
        Celsius = celsius;
        Fahrenheit = celsius * 9 / 5 + 32;
    }
}

class Program
{
    static void Main()
    {
        var t = new Temperature(25);
        Console.WriteLine(t.Celsius + "C = " + t.Fahrenheit + "F");
    }
}

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับคอนสตรักเตอร์

ทบทวน

คอนสตรักเตอร์ ใช้ชื่อเดียวกับคลาส ไม่มีชนิดค่าที่ส่งกลับ และทำงานเมื่อใช้ new คอนสตรักเตอร์ที่รับพารามิเตอร์จะรับค่าเริ่มต้น ส่วน this. ใช้แยกฟิลด์ออกจากพารามิเตอร์ได้อย่างชัดเจน คุณสามารถสร้างคอนสตรักเตอร์หลายรูปแบบและใช้ค่าเริ่มต้นของพารามิเตอร์ได้ การกำหนดคอนสตรักเตอร์ใด ๆ จะทำให้คอนสตรักเตอร์เริ่มต้นที่ระบบสร้างให้อัตโนมัติไม่ถูกสร้างขึ้น

using System;

class Demo
{
    public string Name;
    public Demo(string name = "anon")
    {
        this.Name = name;
    }
}

class Program
{
    static void Main()
    {
        Console.WriteLine(new Demo().Name);
        Console.WriteLine(new Demo("Kai").Name);
    }
}

คำถามที่พบบ่อย

บทเรียน “การกำหนดคอนสตรักเตอร์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดคอนสตรักเตอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดคอนสตรักเตอร์”

สร้างอินสแตนซ์ด้วยคอนสตรักเตอร์ที่รับพารามิเตอร์ คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดคอนสตรักเตอร์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม

ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การกำหนดคอนสตรักเตอร์
  2. การเชื่อมโยงคอนสตรักเตอร์ด้วย this
  3. ตัวกำหนดค่าเริ่มต้นของออบเจ็กต์และคอลเลกชัน
  4. คอนสตรักเตอร์แบบสแตติก
← กลับไปที่ C# Academy