C # Object Constructor - сокращенный синтаксис свойства - PullRequest
5 голосов
/ 03 февраля 2009

Несколько месяцев назад я читал о методике, так что если параметры, которые вы передаете, соответствуют локальным переменным, вы можете использовать некоторый сокращенный синтаксис для их установки. Чтобы избежать этого:

public string Method(p1, p2, p3)
{
    this.p1 = p1;
    this.p2 = p2;
    this.p3 = p3;
}

Есть идеи?

Ответы [ 3 ]

25 голосов
/ 03 февраля 2009

Возможно, вы думаете о новом синтаксисе инициализатора объекта в C # 3.0. Это выглядит так:

var foo = new Foo { Bar = 1, Fizz = "hello" };

Таким образом, это дает нам новый экземпляр Foo, со свойством «Bar», инициализированным в 1, и свойством «Fizz» для «hello».

Уловка с этим синтаксисом заключается в том, что если вы пропустите символ "=" и предоставите идентификатор, он будет предполагать, что вы назначаете свойство с тем же именем. Так, например, если бы у меня уже был экземпляр Foo, я мог бы сделать это:

var foo2 = new Foo { foo1.Bar, foo1.Fizz };

Итак, это очень близко к вашему примеру. Если у вашего класса есть свойства p1, p2 и p3, и у вас есть переменные с тем же именем, вы можете написать:

var foo = new Foo { p1, p2, p3 };

Обратите внимание, что это только для конструирования экземпляров, а не для передачи параметров в методы, как показывает ваш пример, так что это может быть не тем, о чем вы думаете.

2 голосов
/ 03 февраля 2009

Возможно, вы думаете об «инициализаторе объекта» в C #, где вы можете создать объект, задав свойства класса, а не используя параметризованный конструктор.

Я не уверен, что его можно использовать в примере, который у вас есть, поскольку ваше "это" уже создано.

0 голосов
/ 28 мая 2019

Существует еще более простой способ сделать это в C # 7 - конструкторы с выражением тела.

Используя ваш пример выше - ваш конструктор может быть упрощен до одной строки кода. Я включил поля класса для полноты, я предполагаю, что они все равно будут в вашем классе.

private string _p1;
private int _p2;
private bool _p3;  

public Method(string p1, int p2, bool p3) => (_p1, _p2, _p3) = (p1, p2, p3);

См. Следующую ссылку для получения дополнительной информации: -

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...