Dela via


Uttrycksbaserade medlemmar (programmeringsguide för C#)

Med uttryckstextdefinitioner kan du tillhandahålla en medlems implementering i ett kortfattat, läsbart formulär. Du kan använda en uttryckstextdefinition när logiken för alla medlemmar som stöds, till exempel en metod eller egenskap, består av ett enda uttryck. En uttryckstextdefinition har följande allmänna syntax:

member => expression;

där uttrycket är ett giltigt uttryck.

Uttryckstextdefinitioner kan användas med följande typmedlemmar:

Metoder

En uttrycksmetod består av ett enda uttryck som returnerar ett värde vars typ matchar metodens returtyp, eller, för metoder som returnerar void, som utför en åtgärd. Typer som åsidosätter ToString metoden innehåller till exempel vanligtvis ett enda uttryck som returnerar strängrepresentationen av det aktuella objektet.

I följande exempel definieras en Person klass som åsidosätter ToString metoden med en uttryckstextdefinition. Den definierar också en DisplayName metod som visar ett namn för konsolen. Nyckelordet return används inte i uttryckstextdefinitionen ToString .

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();
   }
}

Mer information finns i Metoder (C#-programmeringsguide).

Skrivskyddade egenskaper

Du kan använda uttryckstextdefinition för att implementera en skrivskyddad egenskap. Använd följande syntax för att göra det:

PropertyType PropertyName => expression;

I följande exempel definieras en Location klass vars skrivskyddade Name egenskap implementeras som en uttryckstextdefinition som returnerar värdet för det privata locationName fältet:

public class Location
{
   private string locationName;

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

   public string Name => locationName;
}

Mer information om egenskaper finns i Egenskaper (C#-programmeringsguide).

Egenskaper

Du kan använda uttryckstextdefinitioner för att implementera egenskaper get och set accessorer. I följande exempel visas hur du gör det:

public class Location
{
   private string locationName;

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

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

Mer information om egenskaper finns i Egenskaper (C#-programmeringsguide).

Konstruktorer

En uttryckstextdefinition för en konstruktor består vanligtvis av ett enda tilldelningsuttryck eller ett metodanrop som hanterar konstruktorns argument eller initierar instanstillståndet.

I följande exempel definieras en Location klass vars konstruktor har en enda strängparameter med namnet name. Uttryckstextdefinitionen tilldelar argumentet till Name egenskapen.

public class Location
{
   private string locationName;

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

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

Mer information finns i Konstruktorer (C#-programmeringsguide).

Slutförare

En uttryckstextdefinition för en finalizer innehåller vanligtvis rensningsuttryck, till exempel instruktioner som frigör ohanterade resurser.

I följande exempel definieras en finalizer som använder en uttryckstextdefinition för att indikera att finalizern har anropats.

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

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

Mer information finns i Finalizers (C#Programming Guide).

Indexerare

Precis som med egenskaper består indexerare get och set accessorer av uttryckstextdefinitioner om get accessorn består av ett enda uttryck som returnerar ett värde eller set om accessorn utför en enkel tilldelning.

I följande exempel definieras en klass med namnet Sports som innehåller en intern String matris som innehåller namnen på vissa sporter. Både indexeraren get och set accessorerna implementeras som uttryckstextdefinitioner.

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;
   }
}

Mer information finns i Indexerare (C#-programmeringsguide).

Se även