ConditionalWeakTable<TKey,TValue>.CreateValueCallback Delegat

Definicja

Reprezentuje metodę, która tworzy wartość inną niż domyślna, która ma zostać dodana jako część pary klucz/wartość do ConditionalWeakTable<TKey,TValue> obiektu.

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

Parametry

key
TKey

Klucz, który należy do wartości do utworzenia.

Wartość zwracana

TValue

Wystąpienie typu odwołania, które reprezentuje wartość dołączenia do określonego klucza.

Przykłady

W poniższym przykładzie zdefiniowano klasę MainClass i klasę MainInfo . MainInfo zawiera informacje o wystąpieniu MainClass . Definiuje również metodę statyczną (Shared w Visual Basic), CreateAttachedValue którą można przypisać do delegata ConditionalWeakTable<TKey,TValue>.CreateValueCallback i przekazać do GetValue metody. Przykład wywołuje metodę GetValueMainClass , aby dodać obiekt i odpowiadający mu MainInfo obiekt do ConditionalWeakTable<TKey,TValue> tabeli. W przykładzie przedstawiono również wywołania metod i GetOrCreateValue w Add celu dodania par klucz/wartość do tabeli oraz wywołanie TryGetValue metody w celu pobrania wartości należącej do istniejącego klucza.

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

Uwagi

ConditionalWeakTable<TKey,TValue>.CreateValueCallback Delegat hermetyzuje metodę wywołania zwrotnego wywoływaną przez ConditionalWeakTable<TKey,TValue>.GetValue metodę, gdy klucz przekazany do metody nie zostanie znaleziony w ConditionalWeakTable<TKey,TValue> obiekcie. Metoda GetValue przekazuje metodę wywołania zwrotnego klucz, który reprezentuje obiekt zarządzany, do którego ma być dołączona dynamicznie wartość właściwości. Metoda jest odpowiedzialna za zwracanie wartości właściwości do obiektu wywołującego, co z kolei powoduje dodanie pary klucz/wartość do tabeli.

Metoda ConditionalWeakTable<TKey,TValue>.CreateValueCallback służy do zwracania wystąpienia typu odwołania, które można dołączyć do określonego klucza. Umożliwia zainicjowanie tego wystąpienia przy użyciu wartości innych niż domyślne. Jeśli klucz nie zostanie znaleziony w tabeli, metoda dodaje parę klucz/wartość, ConditionalWeakTable<TKey,TValue>.GetOrCreateValue w której wartość jest inicjowana przy użyciu wartości domyślnych.

Metody rozszerzania

GetMethodInfo(Delegate)

Pobiera obiekt reprezentujący metodę reprezentowaną przez określonego delegata.

Dotyczy

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

Zobacz też