类型扩展特定类的属性参数

时间:2018-10-08 18:28:43

标签: c#

有没有一种方法可以传递必须是另一种类型的扩展的参数类型?我试过了,但这不是怎么做的(我相信)。

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 
{
}

1 个答案:

答案 0 :(得分:0)

Type完全不允许这样,您只能提供一个“无限”的Type实例,并且最多只能在运行时验证是否满足任何其他要求,但编译器不会这样做。在这里无法帮助您及早发现问题。

您的代码面临的另一个问题是该类定义了一个属性。 Attributes cannot be generic,因此您不能像大多数其他情况一样对泛型使用一些技巧。在属性定义之外,您可以执行以下操作:

public class Settings<T> where T : MyBaseClass {
    public SettingsAttribute(T action) { }
}

请注意,这不同之处在于它采用类型的 instance 而不是Type本身。

但这在您的特定情况下都不有用。底线:没有限制地生活,并在使用前进行验证。编译器没有为此提供任何其他帮助。