我在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.在这种情况下,它不满足,但没有编译器错误。那是为什么?