TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.7K subscribers
Post #6622 3.71K
🔗 Цепочка конструкторов в C#

Конструкторы вызываются при создании объекта. В C# можно связывать их в цепочку: один конструктор вызывает другой. Это убирает дублирование кода инициализации.​

Представьте класс User с тремя конструкторами:
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public DateTime Created { get; set; }

// Базовая инициализация
public User()
{
Created = DateTime.Now;
Name = "Гость";
Email = "guest@example.com";
}

public User(string name)
{
Created = DateTime.Now; // Дублируем!
Name = name;
Email = "guest@example.com";
}

public User(string name, string email)
{
Created = DateTime.Now; // Снова дублируем!
Name = name;
Email = email;
}
}


Проблема: Created и дефолтные значения повторяются. Изменить в одном месте нельзя.

Как работает цепочка с this()

Используйте : this(параметры):
public class User
{
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
public DateTime Created { get; set; }

// Главный конструктор - вся логика здесь
public User(string name, string email, int age = 0)
{
Created = DateTime.Now;
Name = name ?? "Гость";
Email = email ?? "guest@example.com";
Age = age;
}

// Цепочка к главному
public User() : this("Гость", "guest@example.com") { }

public User(string name) : this(name, "guest@example.com") { }

public User(string name, string email) : this(name, email, 0) { }
}


Тестируем:
var user1 = new User();                    // Гость, guest, 0
var user2 = new User("Иван"); // Иван, guest, 0
var user3 = new User("Иван", "i@example"); // Иван, i@example, 0
var user4 = new User("Анна", "a@ex", 25); // Анна, a@ex, 25


Все получают Created = Now автоматически

Правила цепочки:

• Должна быть первой в конструкторе:
public User(string name) : this(name, "default")  // OK
{
// Дополнительная логика
}


• Нельзя дважды:
public User() : this("a") : base()  // Ошибка!


Идеально для классов с множеством опциональных параметров. Главное: короткие цепочки и главный конструктор с полной логикой.

📍 Навигация: Вакансии • Задачи • Собесы

🐸Библиотека шарписта

#sharp_view
  • ❤ 9
  • 🥱 9
  • 🤩 5
  • 😁 1
More from @csharpproglib
  1. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
  2. Sep 26, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
  3. Sep 25, 2026🔐 NuGet: Microsoft меняет сертификат подписи С 23 сентября Microsoft использует новый сер…
  4. Sep 24, 2026🤩 Как поймать зависший .NET-сервис Приложение начинает тормозить, запросы зависают, а в л…
  5. Sep 23, 2026⚙️ yield return не бесплатный Итераторы выглядят просто, но работают иначе: IEnumerable<in…
  6. Sep 22, 2026💡 Replace, Regex или StringBuilder? Для замены текста в C# есть несколько инструментов. И…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →