有没有一种方法可以传递必须是另一种类型的扩展的参数类型?我试过了,但这不是怎么做的(我相信)。
public class SettingsAttribute : Attribute
{
public SettingsAttribute(Type<MyBaseClass> action)
{
}
}
有效
public class Dog : MyBaseClass
{
}
[Settings(typeof(Dog))]
public class ABC
{
}
无效
public class Cat : DoesntExtendMyBaseClass
{
}
[Settings(typeof(Cat))]
public class ABC
{
}
答案 0 :(得分:0)
Type
完全不允许这样,您只能提供一个“无限”的Type
实例,并且最多只能在运行时验证是否满足任何其他要求,但编译器不会这样做。在这里无法帮助您及早发现问题。
您的代码面临的另一个问题是该类定义了一个属性。 Attributes cannot be generic,因此您不能像大多数其他情况一样对泛型使用一些技巧。在属性定义之外,您可以执行以下操作:
public class Settings<T> where T : MyBaseClass {
public SettingsAttribute(T action) { }
}
请注意,这不同之处在于它采用类型的 instance 而不是Type
本身。
但这在您的特定情况下都不有用。底线:没有限制地生活,并在使用前进行验证。编译器没有为此提供任何其他帮助。