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

Type, MethodInfo, การสร้างอินสแตนซ์ และแอตทริบิวต์แบบกำหนดเอง

รับออบเจ็กต์ Type ค้นหา MethodInfo เรียกใช้เมธอด สร้างอินสแตนซ์ด้วย Activator และกำหนดหรืออ่านแอตทริบิวต์แบบกำหนดเอง

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

ภาพรวม

เป้าหมาย: ใช้การตรวจสอบชนิดแบบสะท้อนอย่างปลอดภัย

  • รับ Type
  • ค้นหา MethodInfo
  • สร้างผ่านตัวสร้างแบบไดนามิก
  • กำหนดและอ่าน แอตทริบิวต์

รับ Type

รับ Type จากนิพจน์ระบุชนิด จาก อินสแตนซ์ ด้วย GetType() หรือจากชื่อผ่าน Type.GetType

using System;

public class Sample { }

public class Program
{
  public static void Main(string[] args)
  {
    // 1) From a compile-time type
    Type t1 = typeof(Sample);

    // 2) From an instance
    Sample s = new Sample();
    Type t2 = s.GetType();

    // 3) From a full name (needs assembly-qualified name for external types)
    Type t3 = Type.GetType("System.String");

    Console.WriteLine(t1.Name + ", " + t2.FullName + ", " + (t3 == null ? "null" : t3.Name));
  }
}

MethodInfo.Invoke

ใช้ GetMethod เพื่อค้นหาเมธอด และใช้ Invoke เพื่อเรียกเมธอดนั้น ส่งอินสแตนซ์และอาร์เรย์อาร์กิวเมนต์เข้าไป

using System;
using System.Reflection;

public class Greeter
{
  public string Hello(string name) { return "Hello, " + name; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Greeter g = new Greeter();
    Type t = typeof(Greeter);

    MethodInfo mi = t.GetMethod("Hello"); // public instance method
    object result = mi.Invoke(g, new object[] { "Ada" }); // call dynamically

    Console.WriteLine(result); // Hello, Ada
  }
}

พื้นฐาน Activator

Activator.CreateInstance(Type) จะสร้างออบเจ็กต์โดยใช้ตัวสร้างสาธารณะที่ไม่มีพารามิเตอร์

using System;

public class Person
{
  public string Name { get; set; }
  public Person() { Name = "Unknown"; } // parameterless ctor
}

public class Program
{
  public static void Main(string[] args)
  {
    Type tp = typeof(Person);
    object o = Activator.CreateInstance(tp); // uses public parameterless ctor
    Person p = (Person)o;
    p.Name = "Alan";
    Console.WriteLine("Created: " + p.Name);
  }
}

แอตทริบิวต์แบบกำหนดเอง

สร้างคลาส Attribute ขนาดเล็ก แล้วดึงข้อมูลผ่าน GetCustomAttributes จากชนิดหรือเมธอด

using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class LabelAttribute : Attribute
{
  public string Text { get; private set; }
  public LabelAttribute(string text) { Text = text; }
}

[Label("Utility class")]
public class Utils
{
  [Label("Adds two ints")]
  public static int Add(int a, int b) { return a + b; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Type t = typeof(Utils);

    // Read class attribute
    object[] classAttrs = t.GetCustomAttributes(typeof(LabelAttribute), false);
    if (classAttrs.Length > 0)
      Console.WriteLine("Class label: " + ((LabelAttribute)classAttrs[0]).Text);

    // Read method attribute
    MethodInfo mi = t.GetMethod("Add");
    object[] methodAttrs = mi.GetCustomAttributes(typeof(LabelAttribute), false);
    if (methodAttrs.Length > 0)
      Console.WriteLine("Method label: " + ((LabelAttribute)methodAttrs[0]).Text);
  }
}

เคล็ดลับและความปลอดภัย

เคล็ดลับ:

  • ตรวจสอบค่า null ที่ได้จาก Type.GetType รวมถึงสมาชิกที่ไม่มีอยู่
  • เลือกใช้ typeof เมื่อทำได้ เพราะทำงานเร็วและปลอดภัยกว่า
  • รวมการใช้การสะท้อนโครงสร้างโปรแกรมไว้ในจุดศูนย์กลาง และจัดทำเอกสารให้ชัดเจน
  • ใช้ BindingFlags สำหรับการค้นหาสมาชิกที่ไม่เป็นสาธารณะหรือสมาชิกแบบคงที่

พื้นฐานการสร้างอินสแตนซ์

ตรวจสอบอย่างรวดเร็ว: API ใดใช้สร้างอินสแตนซ์จาก Type ที่มีตัวสร้างสาธารณะไม่มีพารามิเตอร์

สรุป

สรุป: รับ Type ค้นหา MethodInfo สร้างด้วย Activator และอ่านแอตทริบิวต์โดยใช้ GetCustomAttributes

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

บทเรียน “Type, MethodInfo, การสร้างอินสแตนซ์ และแอตทริบิวต์แบบกำหนดเอง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “Type, MethodInfo, การสร้างอินสแตนซ์ และแอตทริบิวต์แบบกำหนดเอง”

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

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

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

บทเรียน “Type, MethodInfo, การสร้างอินสแตนซ์ และแอตทริบิวต์แบบกำหนดเอง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. Type, MethodInfo, การสร้างอินสแตนซ์ และแอตทริบิวต์แบบกำหนดเอง
  2. ข้อมูลระดับซอร์ส (แอตทริบิวต์ Caller)
  3. สถานการณ์เมตาโปรแกรมมิงแบบเบื้องต้น
← กลับไปที่ C# Academy