제네릭 형식 매개 변수를 인터페이스로 사용해야하지만 제네릭 클래스 (SomeGenericType)의 형식을 다음과 같이 인스턴스화하고 싶습니다.new() 제약 조건을 가진 제네릭 형식 매개 변수 인 추상 형식 및 인터페이스 관련 문제
class Program
{
static void Main(string[] args)
{
var val = new SomeGenericType<ISomeInterface>();
Console.ReadKey();
}
}
internal class SomeGenericType<T> where T : new()
{
public SomeGenericType()
{
var test = new T();
}
}
public class SomeClass : ISomeInterface
{
public string TestVal { get; set; }
}
public interface ISomeInterface
{
string TestVal { get; set; }
}
이 다음과 같은 컴파일 타임 오류가 발생합니다 :
이"ISomeInterface는 제네릭 형식 또는 메서드 SomeGenericType에 매개 변수로 'T'를 사용하기 위해 공공 매개 변수가없는 생성자가 아닌 추상 형식이어야합니다"
왜 이런 일이 벌어지는 지 이해하지만,이 문제를 해결할 방법이 있는지 궁금합니다.
감사합니다.
제약 조건을 추가하면 도움이 될까요? '어디 T : ISomeInterface, new()'. 앞서 언급했듯이 generic에 대한 구체적인 구현을 제공해야 할 것입니다. new() 제약을 보장 할 다른 방법이 없기 때문입니다. – Sapph
Interface1, Class1 : Interface1, Class2 : Interface1이있는 경우 Class1 또는 Class2의 인스턴스를 만들려면 컴파일러에서 어떻게 추측해야합니까? –