제네릭에 대해 깊이 이해하고 있으며 이제 도움이 필요한 상황이 있습니다. 제목 제목에 표시된 것처럼 아래 ‘파생’클래스에서 컴파일 오류가 발생합니다. 이 게시물과 비슷한 다른 게시물이 많이 있지만 관계가 보이지 않습니다. 누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?
using System;
using System.Collections.Generic;
namespace Example
{
public class ViewContext
{
ViewContext() { }
}
public interface IModel
{
}
public interface IView<T> where T : IModel
{
ViewContext ViewContext { get; set; }
}
public class SomeModel : IModel
{
public SomeModel() { }
public int ID { get; set; }
}
public class Base<T> where T : IModel
{
public Base(IView<T> view)
{
}
}
public class Derived<SomeModel> : Base<SomeModel> where SomeModel : IModel
{
public Derived(IView<SomeModel> view)
: base(view)
{
SomeModel m = (SomeModel)Activator.CreateInstance(typeof(SomeModel));
Service<SomeModel> s = new Service<SomeModel>();
s.Work(m);
}
}
public class Service<SomeModel> where SomeModel : IModel
{
public Service()
{
}
public void Work(SomeModel m)
{
}
}
}
답변
나는 생식,하지만 난 할 수 의심 실제 코드에있는 제약 곳이 있음 T : class
– 당신은 (A 생식 예를하지 않고 확실히 말할 하드) 예를 들어, 컴파일러 행복을 만들기 위해 그 내용을 전파 할 필요가 :
public class Derived<SomeModel> : Base<SomeModel> where SomeModel : class, IModel
^^^^^
see this bit
답변
당신이 제한 T
되어 있다면이 오류가 발생합니다class
답변
제네릭 클래스 또는 메서드에 제약 조건을 적용하는 경우이 클래스를 사용하는 다른 모든 일반 클래스 또는 메서드에는 “적어도”해당 제약 조건이 있어야합니다.