本文整理汇总了C#中IKVM.Reflection.Type.GetGenericParameterConstraints方法的典型用法代码示例。如果您正苦于以下问题:C# Type.GetGenericParameterConstraints方法的具体用法?C# Type.GetGenericParameterConstraints怎么用?C# Type.GetGenericParameterConstraints使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IKVM.Reflection.Type
的用法示例。
在下文中一共展示了Type.GetGenericParameterConstraints方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ImportTypeParameterTypeConstraints
void ImportTypeParameterTypeConstraints (TypeParameterSpec spec, MetaType type)
{
var constraints = type.GetGenericParameterConstraints ();
List<TypeSpec> tparams = null;
foreach (var ct in constraints) {
if (ct.IsGenericParameter) {
if (tparams == null)
tparams = new List<TypeSpec> ();
tparams.Add (CreateType (ct));
continue;
}
if (!IsMissingType (ct) && ct.IsClass) {
spec.BaseType = CreateType (ct);
continue;
}
spec.AddInterface (CreateType (ct));
}
if (spec.BaseType == null)
spec.BaseType = module.Compiler.BuiltinTypes.Object;
if (tparams != null)
spec.TypeArguments = tparams.ToArray ();
}
示例2: CreateTypeParameter
TypeParameterSpec CreateTypeParameter (MetaType type, TypeSpec declaringType)
{
Variance variance;
switch (type.GenericParameterAttributes & GenericParameterAttributes.VarianceMask) {
case GenericParameterAttributes.Covariant:
variance = Variance.Covariant;
break;
case GenericParameterAttributes.Contravariant:
variance = Variance.Contravariant;
break;
default:
variance = Variance.None;
break;
}
SpecialConstraint special = SpecialConstraint.None;
var import_special = type.GenericParameterAttributes & GenericParameterAttributes.SpecialConstraintMask;
if ((import_special & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0) {
special |= SpecialConstraint.Struct;
} else if ((import_special & GenericParameterAttributes.DefaultConstructorConstraint) != 0) {
special = SpecialConstraint.Constructor;
}
if ((import_special & GenericParameterAttributes.ReferenceTypeConstraint) != 0) {
special |= SpecialConstraint.Class;
}
TypeParameterSpec spec;
var def = new ImportedTypeParameterDefinition (type);
if (type.DeclaringMethod != null)
spec = new TypeParameterSpec (type.GenericParameterPosition, def, special, variance, type);
else
spec = new TypeParameterSpec (declaringType, type.GenericParameterPosition, def, special, variance, type);
// Add it now, so any constraint can reference it and get same instance
import_cache.Add (type, spec);
var constraints = type.GetGenericParameterConstraints ();
List<TypeSpec> tparams = null;
foreach (var ct in constraints) {
if (ct.IsGenericParameter) {
if (tparams == null)
tparams = new List<TypeSpec> ();
tparams.Add (CreateType (ct));
continue;
}
if (ct.IsClass) {
spec.BaseType = CreateType (ct);
continue;
}
spec.AddInterface (CreateType (ct));
}
if (spec.BaseType == null)
spec.BaseType = TypeManager.object_type;
if (tparams != null)
spec.TypeArguments = tparams.ToArray ();
return spec;
}