by_kapt0xa
@by_kapt0xa
Учу кресты катаюсь на велике

Как перевести это с C++ на C#?

не знаю как сделать chain-setter в C#. вот что я имею ввиду под chain-setter'ом в C++
struct my_struct
{
    my_struct& setter()
    {
        return *this;
    }
};

class my_class
{
public:
    my_class& setter()
    {
        return *this;
    }
};

вот я попробовал перевести на C#, но компилятор со мной не согласен. (не очень разбираюсь в версиях, вроде бы .Net 6.0, если это имеет значение)
struct my_struct
{
    public ref my_struct setter()
    {
        return ref this;// ошибка "cant return 'this' or other instance members by reference"
    }
}

class my_class
{
    public ref my_class setter()
    {
        return ref this;// ошибка "cant return 'this' by reference"
    }
}
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
В C# такое делается вот так:
public class PersonBuilder
{
  public int Age { get; set; }
  public string Name { get; set; }
  public PersonBuilder WithAge(int age)
  {
    this.Age = age;
    return this;
  }
  public PersonBuilder WithName(string name)
  {
    this.Name = name;
    return this;
  }
}

var personBuilder = new PersonBuilder()
  .WithName("Ivan")
  .WithAge(20);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
yarosroman
@yarosroman Куратор тега C#
C# the best
1. Если в плюсах class и struct фактически одно и тоже (да у класса по умолчанию все приватное, у структуры открытое, в этом разница), в шарпе это разные вещи.
2. в шарпе классы и так по ссылке передаются, ref class в шарпе аналог **class (указатель на указатель) и ref struct - *struct в плюсах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы