编译器不强制执行通用C#约束

时间:2015-03-11 16:03:41

标签: c# .net generics unity3d generic-constraints

我在Unity3D(在C#中)工作,我在这里定义了这个泛型类:

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour

这是其他类派生自的单例类型的模板。

MonoBehaviour 类包含太多字段和方法,因此要保持返回的Singleton实例(类型为T)太杂乱,我定义了以下类型:

/// <summary>
/// A singleton implementation where the Instance property can return another type I (derived from T)
/// </summary>
public class Singleton<T, I> : Singleton<T> 
    where T : MonoBehaviour, I
{
    public static new I Instance
    {
        get
        {
            // Return the Instance property, cast as I
            return (I)Singleton<T>.Instance;
        }
    }
}

这一切都很好,但是以下新类型定义不会导致编译器错误:

public class SomeVideoProvider : Singleton<SomeVideoProvider, IVideoAds>
{
    // Why doesn't the compiler enforce this type to be derived from IVideoAds ?
}

泛型约束声明T应该是MonoBehaviour和I.在这种情况下,它不满足,但没有编译器错误。那是为什么?

0 个答案:

没有答案