Expressie-bodyied leden (C#-programmeerhandleiding)

Met expressietekstdefinities kunt u de implementatie van een lid in een beknopte, leesbare vorm bieden. U kunt een definitie van de expressietekst gebruiken wanneer de logica voor elk ondersteund lid, zoals een methode of eigenschap, bestaat uit één expressie. Een definitie van de hoofdtekst van een expressie heeft de volgende algemene syntaxis:

member => expression;

waarbij expressie een geldige expressie is.

Hoofdtekstdefinities van expressies kunnen worden gebruikt met het volgende type leden:

Methoden

Een expressie-bodied methode bestaat uit één expressie die een waarde retourneert waarvan het type overeenkomt met het retourtype van de methode, of, voor methoden die een voidbepaalde bewerking uitvoeren. Typen die de ToString methode overschrijven, bevatten bijvoorbeeld doorgaans één expressie die de tekenreeksweergave van het huidige object retourneert.

In het volgende voorbeeld wordt een Person klasse gedefinieerd waarmee de methode wordt overschreven met een definitie van de ToString expressietekst. Er wordt ook een DisplayName methode gedefinieerd waarmee een naam voor de console wordt weergegeven. Het return trefwoord wordt niet gebruikt in de definitie van de ToString expressietekst.

using System;

namespace ExpressionBodiedMembers;

public class Person
{
   public Person(string firstName, string lastName)
   {
      fname = firstName;
      lname = lastName;
   }

   private string fname;
   private string lname;

   public override string ToString() => $"{fname} {lname}".Trim();
   public void DisplayName() => Console.WriteLine(ToString());
}

class Example
{
   static void Main()
   {
      Person p = new Person("Mandy", "Dejesus");
      Console.WriteLine(p);
      p.DisplayName();
   }
}

Zie Methoden (C#-programmeerhandleiding) voor meer informatie.

Alleen-lezen eigenschappen

U kunt de definitie van de expressietekst gebruiken om een eigenschap met het kenmerk Alleen-lezen te implementeren. Gebruik hiervoor de volgende syntaxis:

PropertyType PropertyName => expression;

In het volgende voorbeeld wordt een Location klasse gedefinieerd waarvan de eigenschap alleen-lezen Name is geïmplementeerd als een definitie van de expressietekst die de waarde van het privéveld locationName retourneert:

public class Location
{
   private string locationName;

   public Location(string name)
   {
      locationName = name;
   }

   public string Name => locationName;
}

Zie Eigenschappen (C#-programmeerhandleiding) voor meer informatie over eigenschappen.

Eigenschappen

U kunt hoofdtekstdefinities van expressies gebruiken om eigenschappen get en set accessors te implementeren. In het volgende voorbeeld ziet u hoe u dit doet:

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Zie Eigenschappen (C#-programmeerhandleiding) voor meer informatie over eigenschappen.

Constructors

Een definitie van de hoofdtekst van een expressie voor een constructor bestaat doorgaans uit één toewijzingsexpressie of een methodeaanroep die de argumenten van de constructor afhandelt of de instantiestatus initialiseert.

In het volgende voorbeeld wordt een Location klasse gedefinieerd waarvan de constructor één tekenreeksparameter heeft met de naam. De definitie van de expressietekst wijst het argument toe aan de Name eigenschap.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Zie Constructors (C#-programmeerhandleiding) voor meer informatie.

Finalizers

Een definitie van de expressietekst voor een finalizer bevat doorgaans opschooninstructies, zoals instructies die onbeheerde resources vrijgeven.

In het volgende voorbeeld wordt een finalizer gedefinieerd die gebruikmaakt van een definitie van de expressietekst om aan te geven dat de finalizer is aangeroepen.

public class Destroyer
{
   public override string ToString() => GetType().Name;

   ~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing.");
}

Zie Finalizers (C#-programmeerhandleiding) voor meer informatie.

Indexeerfuncties

Net als bij eigenschappen bestaan indexeerfunctie get en set accessors uit definities van expressieteksten als de get accessor bestaat uit één expressie die een waarde retourneert of de set accessor een eenvoudige toewijzing uitvoert.

In het volgende voorbeeld wordt een klasse gedefinieerd Sports die een interne String matrix bevat die de namen van sommige sporten bevat. Zowel de indexeerfunctie get als set de accessors worden geïmplementeerd als hoofdtekstdefinities voor expressies.

using System;
using System.Collections.Generic;

namespace SportsExample;

public class Sports
{
   private string[] types = [ "Baseball", "Basketball", "Football",
                              "Hockey", "Soccer", "Tennis",
                              "Volleyball" ];

   public string this[int i]
   {
      get => types[i];
      set => types[i] = value;
   }
}

Zie Indexeerfuncties (C#-programmeerhandleiding) voor meer informatie.

Zie ook