Lire en anglais

Partager via


ConditionalWeakTable<TKey,TValue>.CreateValueCallback Délégué

Définition

Représente une méthode qui crée une valeur, autre qu’une valeur par défaut, à ajouter à un objet ConditionalWeakTable<TKey,TValue> dans le cadre d’une paire clé/valeur.

C#
public delegate TValue ConditionalWeakTable<TKey,TValue>.CreateValueCallback(TKey key) where TKey : class where TValue : class;

Paramètres

key
TKey

Clé qui appartient à la valeur à créer.

Valeur renvoyée

TValue

Instance d’un type référence qui représente la valeur à associer à la clé spécifiée.

Exemples

L’exemple suivant définit une MainClass classe et une MainInfo classe. MainInfofournit des informations sur le MainClass instance. Il définit également une méthode statique (Shared en Visual Basic) CreateAttachedValue qui peut être affectée au ConditionalWeakTable<TKey,TValue>.CreateValueCallback délégué et passée à la GetValue méthode. L’exemple appelle la GetValue méthode pour ajouter un MainClass objet et son objet correspondant MainInfo à une ConditionalWeakTable<TKey,TValue> table. L’exemple illustre également les appels aux Add méthodes et GetOrCreateValue pour ajouter des paires clé/valeur à la table, et un appel à la TryGetValue méthode pour récupérer la valeur qui appartient à une clé existante.

C#
using System;
using System.Reflection;
using System.Runtime.CompilerServices;

public class Example
{
   string Name; 
   
   public Example(string name)
   {
      this.Name = name;
   }
   
   public override string ToString()
   {
      return this.Name;
   }
}

// Define a class to contain information about each Example instance.
public class ExampleInfo
{
   public string Name;
   public int Methods;
   public int Properties;
   
   public override string ToString()
   {
      return String.Format("{0}: {1} Methods, {2} Properties", 
                           this.Name, this.Methods, this.Properties);
   }
}

public class ExampleTest
{
   private static BindingFlags flags = BindingFlags.Public | BindingFlags.Instance;

   public static void Main()
   {
      Example ex1 = new Example("ex1");
      Example ex2 = new Example("ex2");
      Example ex3 = new Example("ex3");
      
      ExampleInfo exInfo1 = new ExampleInfo(); 
      exInfo1.Name = ex1.ToString();
      exInfo1.Methods = ex1.GetType().GetMethods(flags).Length;
      exInfo1.Properties = ex1.GetType().GetProperties(flags).Length;
      
      ExampleInfo exInfo3 = new ExampleInfo(); 
      exInfo3.Name = ex3.ToString();
      exInfo3.Methods = ex3.GetType().GetMethods(flags).Length;
      exInfo3.Properties = ex3.GetType().GetProperties(flags).Length;

      var attached = new ConditionalWeakTable<Example, ExampleInfo>();
      ExampleInfo value = null;

      // Attach a property to ex1 using the Add method, then retrieve it.
      attached.Add(ex1, exInfo1);
      if (attached.TryGetValue(ex1, out value))
         Console.WriteLine("{0}, {1}", ex1, value);
      else
         Console.WriteLine("{0} does not have an attached property.", ex1);

      // Attempt to retrieve the value attached to ex2.
      value = attached.GetValue(ex2, ExampleTest.CreateAttachedValue);      
      if (attached.TryGetValue(ex2, out value))
         Console.WriteLine("{0}, {1}", ex2, value);
      else 
         Console.WriteLine("{0} does not have an attached property.", ex2);
      
      // Attempt to retrieve the value attached to ex3.
      value = attached.GetOrCreateValue(ex3);
      Console.WriteLine("{0}, {1}", ex3, value);
   }

   public static ExampleInfo CreateAttachedValue(Example ex)
   {
      ExampleInfo info = new ExampleInfo();
      info.Name = ex.ToString();
      info.Methods = ex.GetType().GetMethods(flags).Length;
      info.Properties = ex.GetType().GetProperties(flags).Length;
      return info;
   }
}
// The example displays the following output:
//       ex1, ex1: 4 Methods, 0 Properties
//       ex2, ex2: 4 Methods, 0 Properties
//       ex3, : 0 Methods, 0 Properties

Remarques

Le ConditionalWeakTable<TKey,TValue>.CreateValueCallback délégué encapsule une méthode de rappel appelée par la ConditionalWeakTable<TKey,TValue>.GetValue méthode lorsque la clé passée à la méthode est introuvable dans l’objet ConditionalWeakTable<TKey,TValue> . La GetValue méthode transmet à la méthode de rappel la clé qui représente un objet managé auquel une valeur de propriété doit être attachée dynamiquement. La méthode est chargée de renvoyer la valeur de la propriété à son appelant, qui, à son tour, ajoute la paire clé/valeur à la table.

La ConditionalWeakTable<TKey,TValue>.CreateValueCallback méthode est utilisée pour renvoyer un instance d’un type de référence qui peut être attaché à la clé spécifiée. Il permet d’initialiser cette instance à l’aide de valeurs autres que celles par défaut. Si la clé est introuvable dans la table, la ConditionalWeakTable<TKey,TValue>.GetOrCreateValue méthode ajoute une paire clé/valeur dans laquelle la valeur est initialisée à l’aide de valeurs par défaut.

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Produit Versions
.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, 10
.NET Framework 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.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Voir aussi