我想将Type
参数传递给构造函数。此构造函数属于属性。
这很简单。但是,如何将此Type
参数仅约束到特定类的子类?
所以我有一个父类ParentClass
和两个子类MyChildClass : ParentClass
和MyOtherChildClass : ParentClass
。
我的属性如下所示:
public class AssociatedTypeAttribute : Attribute
{
private readonly Type _associatedType;
public Type AssociatedType => _associatedType;
public AssociatedTypeAttribute(Type associatedType)
{
if (!associatedType.IsSubclassOf(typeof(ParentClass)))
throw new ArgumentException($"Specified type must be a {nameof(Parentclass)}, {associatedType.Name} is not.");
_associatedType = associatedType;
}
}
这是有效的,并且在运行时它会在类型不是ParentClass
时抛出异常 - 但是运行时太晚了。
是否可以添加某种约束?我可以在这里使用泛型,还是我正确地说泛型是超出范围的,因为它是属性的构造函数?
注意用法:
public enum MyEnum
{
[AssociatedType(typeof(MyChildClass))]
MyEnumValue,
[AssociatedType(typeof(MyOtherChildClass))]
MyOtherEnumValue
}
答案 0 :(得分:1)
您无法使用Type
执行此操作,并且您无法使用泛型,因为不允许使用泛型类扩展Attribute
。
您拥有的最佳解决方案是运行时检查,如果目标与预期目标不匹配,则忽略该属性。