Auf Englisch lesen

Freigeben über


ConditionalWeakTable<TKey,TValue>.CreateValueCallback Delegat

Definition

Stellt eine Methode dar, die einen nicht standardmäßigen Wert erstellt, der als Teil eines Schlüssel-Wert-Paars einem ConditionalWeakTable<TKey,TValue>-Objekt hinzugefügt wird.

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

Parameter

key
TKey

Der Schlüssel, der dem zu erstellenden Wert angehört.

Rückgabewert

TValue

Eine Instanz eines Verweistyps, der den Wert darstellt, der an den angegebenen Schlüssel angefügt werden soll.

Beispiele

Im folgenden Beispiel werden eine MainClass Klasse und eine MainInfo Klasse definiert. MainInfostellt Informationen zum MainClass instance bereit. Außerdem wird eine statische Methode (Shared in Visual Basic) CreateAttachedValue definiert, die dem ConditionalWeakTable<TKey,TValue>.CreateValueCallback Delegaten zugewiesen und an die GetValue -Methode übergeben werden kann. Im Beispiel wird die GetValue -Methode aufgerufen, um einer Tabelle ein MainClass Objekt und das ConditionalWeakTable<TKey,TValue> zugehörige MainInfo Objekt hinzuzufügen. Das Beispiel veranschaulicht auch Aufrufe der Add Methoden und GetOrCreateValue zum Hinzufügen von Schlüssel-Wert-Paaren zur Tabelle sowie einen Aufruf der TryGetValue -Methode zum Abrufen des Werts, der zu einem vorhandenen Schlüssel gehört.

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

Hinweise

Der ConditionalWeakTable<TKey,TValue>.CreateValueCallback Delegat kapselt eine Rückrufmethode, die von der ConditionalWeakTable<TKey,TValue>.GetValue -Methode aufgerufen wird, wenn der an die -Methode übergebene Schlüssel im ConditionalWeakTable<TKey,TValue> -Objekt nicht gefunden wird. Die GetValue -Methode übergibt der Rückrufmethode den Schlüssel, der ein verwaltetes Objekt darstellt, dem ein Eigenschaftswert dynamisch angefügt werden soll. Die -Methode ist dafür verantwortlich, den Eigenschaftswert an ihren Aufrufer zurückzugeben, wodurch wiederum das Schlüssel-Wert-Paar der Tabelle hinzugefügt wird.

Die ConditionalWeakTable<TKey,TValue>.CreateValueCallback -Methode wird verwendet, um einen instance eines Verweistyps zurückzugeben, der an den angegebenen Schlüssel angefügt werden kann. Es ermöglicht, dass instance mit Nicht-Standardwerten initialisiert werden kann. Wenn der Schlüssel nicht in der Tabelle gefunden wird, fügt die ConditionalWeakTable<TKey,TValue>.GetOrCreateValue Methode ein Schlüssel-Wert-Paar hinzu, in dem der Wert mithilfe von Standardwerten initialisiert wird.

Erweiterungsmethoden

GetMethodInfo(Delegate)

Ruft ein Objekt ab, das die Methode darstellt, die vom angegebenen Delegaten dargestellt wird.

Gilt für:

Produkt Versionen
.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

Weitere Informationen