Skip to main content

C# vs Java. Expression-bodied members

· 2 min read
Andrey Ganyushkin

Expression-bodied members (C# programming guide)

Очередной пересказ документации 😉

C#

Expression-body - возможность реализовать тело члена класса в очень лаконичной форме. Другими словами - это тело метода в виде одного выражения, которое может возвращать знаыение. Синтаксис чем-то напоминает определение лямбд.

Может применяться для реализации следующих членов класса:

  • Методы
  • Read-only свойства
  • Свойства
  • Конструкторы
  • Деструктор (finalizer)
  • Индексеры (indexer)

Методы

class Plant
{
private string Name;

public void PrintName() => Console.WriteLine(f"Plant Name: {Name}");

public int SortOrder() => 3;
}

// or with simple Math functions
class MyMath
{
public double Add(double x1, double x2) => x1 + x2;
public double Div(double x1, double x2) => x1 / x2;
...
}

Свойства

class Plant
{
private string internalNameVariable;

// для read-only свойств - очень короткий формат геттера
public string Name() => internalNameVariable;

// или полный формат для геттера и сеттера
public string PlantName
{
get => internalNameVariable;
set => internalNameVariable = value;
}
}

Конструкторы

class Plant
{
private string internalNameVariable;

public Plant(string name) => internalNameVariable = name;
}

Деструктор (finalizer)

class PlantPool
{
~Destroyer() => Console.WriteLine("Todo Something...");
}

Индексеры (indexer)

Используем пример из статьи C# vs Java. Indexers и перепишем с использованием expression-body

class PlantPool
{
private Plant[] plantPool { get; init; }
public PlantPool(int Capacity) { this.plantPool = new Plant[Capacity]; }

public Plant this[int i]
{
get => plantPool[i];
set => plantPool[i] = value;
}
}

Java

Java так не имеет.