ไวยากรณ์สำหรับตัวสร้างเริ่มต้นสำหรับคลาสทั่วไปคืออะไร?


86

ห้ามใน C # ใช้ตัวสร้างเริ่มต้นสำหรับคลาสทั่วไปหรือไม่?

ถ้าไม่ทำไมโค้ดด้านล่างไม่คอมไพล์? (เมื่อฉันลบ<T>คอมไพล์ออก)

วิธีที่ถูกต้องในการกำหนดคอนสตรัคเตอร์เริ่มต้นสำหรับคลาสทั่วไปคืออะไร?

public class Cell<T> 
{
    public Cell<T>()
    {
    }
}

ข้อผิดพลาดเวลาคอมไพล์ : ข้อผิดพลาด 1 โทเค็นไม่ถูกต้อง '(' ในการประกาศสมาชิกคลาสโครงสร้างหรืออินเทอร์เฟซ

คำตอบ:


144

คุณไม่ได้ระบุพารามิเตอร์ type ในตัวสร้าง นี่คือวิธีที่คุณควรทำ

public class Cell<T> 
{
    public Cell()
    {
    }
}

11

และหากคุณต้องการ Type เป็นคุณสมบัติ:

public class Cell<T>
{
    public Cell()
    {
        TheType = typeof(T);
    }

    public Type TheType { get;}
}

6

และหากคุณต้องการฉีดอินสแตนซ์ประเภท:

public class Cell<T>
{
    public T Thing { get; }

    public Cell(T thing)
    {
        Thing = thing;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.