[C#] 제네릭 형식이나 메서드에서 매개 변수 ‘T’로 사용하려면 형식이 참조 형식이어야합니다.

제네릭에 대해 깊이 이해하고 있으며 이제 도움이 필요한 상황이 있습니다. 제목 제목에 표시된 것처럼 아래 ‘파생’클래스에서 컴파일 오류가 발생합니다. 이 게시물과 비슷한 다른 게시물이 많이 있지만 관계가 보이지 않습니다. 누군가이 문제를 해결하는 방법을 말해 줄 수 있습니까?

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


답변

제네릭 클래스 또는 메서드에 제약 조건을 적용하는 경우이 클래스를 사용하는 다른 모든 일반 클래스 또는 메서드에는 “적어도”해당 제약 조건이 있어야합니다.


답변