การกำหนดคอนสตรักเตอร์
สร้างอินสแตนซ์ด้วยคอนสตรักเตอร์ที่รับพารามิเตอร์
การกำหนดคอนสตรักเตอร์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดคอนสตรักเตอร์
- การเชื่อมโยงคอนสตรักเตอร์ด้วย this
- ตัวกำหนดค่าเริ่มต้นของออบเจ็กต์และคอลเลกชัน
- คอนสตรักเตอร์แบบสแตติก