컴파일러 오류 CS0310

업데이트: 2007년 11월

오류 메시지

'typename'은(는) 제네릭 형식 또는 메서드 'generic'에서 'parameter' 매개 변수로 사용하려면 매개 변수가 없는 public 생성자를 사용하는 비추상 형식이어야 합니다.
The type 'typename' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'parameter' in the generic type or method 'generic'

제네릭 형식 또는 메서드는 where 절에서 새 제약 조건을 정의하므로 그러한 제네릭 형식 또는 메서드의 형식 인수로 사용하려는 모든 형식에는 매개 변수 없는 public 생성자가 있어야 합니다. 이 오류가 발생하지 않도록 하려면 형식에 올바른 생성자가 있는지 확인하거나 제네릭 형식 또는 메서드의 제약 조건 절을 수정합니다.

예제

다음 샘플에서는 CS0310 오류가 발생하는 경우를 보여 줍니다.

// CS0310.cs
using System;

class G<T> where T : new()
{
    T t;

    public G()
    {
        t = new T();
        Console.WriteLine(t);
    }
}

class B
{
    private B() { }
    // Try this instead:
    // public B() { }
}

class CMain
{
    public static void Main()
    {
        G<B> g = new G<B>();   // CS0310
        Console.WriteLine(g.ToString());
    }
}