İngilizce dilinde oku

Aracılığıyla paylaş


GenericParameterAttributes Sabit listesi

Tanım

Genel türün veya yöntemin genel tür parametresindeki kısıtlamaları açıklar.

Bu sabit listesi, üyeleri için bit düzeyinde karşılaştırmayı destekler.

C#
[System.Flags]
public enum GenericParameterAttributes
Devralma
GenericParameterAttributes
Öznitelikler

Alanlar

Name Değer Description
AllowByRefLike 32

Genel tür parametresi ByRefLikeolabilir.

Contravariant 2

Genel tür parametresi değişken karşıtıdır. Değişken karşıtı tür parametresi, yöntem imzalarında parametre türü olarak görünebilir.

Covariant 1

Genel tür parametresi birlikte değişkendir. Ortak değişken türü parametresi bir yöntemin sonuç türü, salt okunur alan türü, bildirilen bir temel tür veya uygulanan arabirim olarak görünebilir.

DefaultConstructorConstraint 16

Bir tür, yalnızca parametresiz bir oluşturucuya sahipse genel tür parametresiyle değiştirilebilir.

None 0

Özel bayrak yok.

NotNullableValueTypeConstraint 8

Bir tür, yalnızca bir değer türüyse ve boş değer atanamazsa genel tür parametresiyle değiştirilebilir.

ReferenceTypeConstraint 4

Bir tür, yalnızca bir başvuru türüyse genel tür parametresiyle değiştirilebilir.

SpecialConstraintMask 28

Tüm özel kısıtlama bayraklarının birleşimini seçer. Bu değer, mantıksal OR kullanarak şu bayrakları birleştirmenin sonucudur: DefaultConstructorConstraint, ReferenceTypeConstraintve NotNullableValueTypeConstraint.

VarianceMask 3

Tüm varyans bayraklarının birleşimini seçer. Bu değer, mantıksal VEYA kullanarak şu bayrakları birleştirmenin sonucudur: Contravariant ve Covariant.

Örnekler

Aşağıdaki kod örneği, iki tür parametresine sahip genel bir tür Test tanımlar. İkinci tür parametresinin temel sınıf kısıtlaması ve başvuru türü kısıtlaması vardır. Program yürütürken, kısıtlamalar Type.GenericParameterAttributes özelliği ve Type.GetGenericParameterConstraints yöntemi kullanılarak incelenir.

C#
using System;
using System.Reflection;

// Define a sample interface to use as an interface constraint.
public interface ITest {}

// Define a base type to use as a base class constraint.
public class Base {}

// Define the generic type to examine. The first generic type parameter,
// T, derives from the class Base and implements ITest. This demonstrates
// a base class constraint and an interface constraint. The second generic 
// type parameter, U, must be a reference type (class) and must have a 
// default constructor (new()). This demonstrates special constraints.
//
public class Test<T,U> 
    where T : Base, ITest 
    where U : class, new() {}

// Define a type that derives from Base and implements ITest. This type
// satisfies the constraints on T in class Test.
public class Derived : Base, ITest {}

public class Example
{
    public static void Main()
    {
        // To get the generic type definition, omit the type
        // arguments but retain the comma to indicate the number
        // of type arguments. 
        //
        Type def = typeof(Test<,>);
        Console.WriteLine("\r\nExamining generic type {0}", def);

        // Get the type parameters of the generic type definition,
        // and display them.
        //
        Type[] defparams = def.GetGenericArguments();
        foreach (Type tp in defparams)
        {
            Console.WriteLine("\r\nType parameter: {0}", tp.Name);
            Console.WriteLine("\t{0}", 
                ListGenericParameterAttributes(tp));

            // List the base class and interface constraints. The
            // constraints are returned in no particular order. If 
            // there are no class or interface constraints, an empty
            // array is returned.
            //
            Type[] tpConstraints = tp.GetGenericParameterConstraints();
            foreach (Type tpc in tpConstraints)
            {
                Console.WriteLine("\t{0}", tpc);
            }
        }
    }

    // List the variance and special constraint flags. 
    //
    private static string ListGenericParameterAttributes(Type t)
    {
        string retval;
        GenericParameterAttributes gpa = t.GenericParameterAttributes;
        GenericParameterAttributes variance = gpa & 
            GenericParameterAttributes.VarianceMask;

        // Select the variance flags.
        if (variance == GenericParameterAttributes.None)
        {
            retval = "No variance flag;";
        }
        else
        {
            if ((variance & GenericParameterAttributes.Covariant) != 0)
                retval = "Covariant;";
            else
                retval = "Contravariant;";
        }

        // Select 
        GenericParameterAttributes constraints = gpa & 
            GenericParameterAttributes.SpecialConstraintMask;

        if (constraints == GenericParameterAttributes.None)
        {
            retval += " No special constraints";
        }
        else
        {
            if ((constraints & GenericParameterAttributes.ReferenceTypeConstraint) != 0)
                retval += " ReferenceTypeConstraint";
            if ((constraints & GenericParameterAttributes.NotNullableValueTypeConstraint) != 0)
                retval += " NotNullableValueTypeConstraint";
            if ((constraints & GenericParameterAttributes.DefaultConstructorConstraint) != 0)
                retval += " DefaultConstructorConstraint";
        }

        return retval;
    }
}
/* This example produces the following output:

Examining generic type Test`2[T,U]

Type parameter: T
        No variance flag; no special constraints.
        Base
        ITest

Type parameter: U
        No variance flag; ReferenceTypeConstraint DefaultConstructorConstraint
 */

Açıklamalar

GenericParameterAttributes numaralandırmasının üyeleri, varyans grubu ve özel kısıtlamalar grubu olmak üzere iki gruba ayrılır. Varyans bayrakları için GenericParameterAttributes bir değeri test etmek için, önce VaryansMask ile bit düzeyinde AND işlemi gerçekleştirin. Sonuç Yok ise, varyans bayrakları yoktur. Benzer şekilde, kısıtlama bayraklarını test etmek için SpecialConstraintMask kullanın.

Şunlara uygulanır

Ürün Sürümler
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0