Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Заблокирован

Определение конструктора класса посредством другого конструктора - ": this(.)"

17.08.2019, 15:55. Показов 1831. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В классе несколько конструкторов, отличающихся числом параметров. И один из конструкторов (с одним параметром) определяется, вероятно, через другой (с двумя параметрами).
В старом примере кода c# увидел тут такую конструкцию, вот этот фрагментик:
C#
1
2
3
4
 public RelayCommand(Action<object> execute)
    : this(execute, null)
    {
    }
Это что за синтаксис такой, где о нем можно прочитать? Это анахронизм или актуально?
И вот весь код:
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public class RelayCommand : ICommand
{
    #region Fields
 
    readonly Action<object> _execute;
    readonly Predicate<object> _canExecute;        
 
    #endregion // Fields
 
    #region Constructors
 
    public RelayCommand(Action<object> execute)
    : this(execute, null)
    {
    }
 
    public RelayCommand(Action<object> execute, Predicate<object> canExecute)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");
 
        _execute = execute;
        _canExecute = canExecute;           
    }
    #endregion // Constructors
 
    #region ICommand Members
 
    [DebuggerStepThrough]
    public bool CanExecute(object parameter)
    {
        return _canExecute == null ? true : _canExecute(parameter);
    }
 
    public event EventHandler CanExecuteChanged
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
 
    public void Execute(object parameter)
    {
        _execute(parameter);
    }
 
    #endregion // ICommand Members
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.08.2019, 15:55
Ответы с готовыми решениями:

Вызов конструктора из конструктора и проверка правильности передаваемых параметров
Существует такой код: public Matrix(Double array) : this(array.GetLength(0), array.GetLength(1)) { ...

Вызов конструктора внутри другого
Добрый день! В моём классе есть некоторое количество конструкторов. В одном из них я принимаю на вход данные. Затем проверяю на...

Вызов конструктора из конструктора - ошибка
Айм водеринг. Но разве из одного конструктора нельзя вызвать другой (из StadoOvechek() вызвать StadoOvechek(int countOvechkas) ) ? Вот...

4
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
17.08.2019, 16:07
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Цитата Сообщение от titan4ik Посмотреть сообщение
Это что за синтаксис такой, где о нем можно прочитать?
Using Constructors (C# Programming Guide)


Цитата Сообщение от titan4ik Посмотреть сообщение
Это анахронизм или актуально?
Актуально и есть в документации...


A constructor can use the base keyword to call the constructor of a base class. For example:
C#
1
2
3
4
5
6
7
8
public class Manager : Employee
{
    public Manager(int annualSalary)
        : base(annualSalary)
    {
        //Add further instructions here.
    }
}
A constructor can invoke another constructor in the same object by using the this keyword. Like base, this can be used with or without parameters, and any parameters in the constructor are available as parameters to this, or as part of an expression. For example, the second constructor in the previous example can be rewritten using this:
C#
1
2
3
4
public Employee(int weeklySalary, int numberOfWeeks)
    : this(weeklySalary * numberOfWeeks)
{
}
2
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
17.08.2019, 17:54
Цитата Сообщение от titan4ik Посмотреть сообщение
Это что за синтаксис такой, где о нем можно прочитать? Это анахронизм или актуально?
Актуально и часто используется.
Просто вы "напоролись" на не очень удачное использование.
В вашем примере достаточно одного конструктора
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
//    public RelayCommand(Action<object> execute)
//    : this(execute, null)
//    {
//    }
 
    public RelayCommand(Action<object> execute, Predicate<object> canExecute = null)
    {
        if (execute == null)
            throw new ArgumentNullException("execute");
 
        _execute = execute;
        _canExecute = canExecute;           
    }
1
Заблокирован
17.08.2019, 21:12  [ТС]
Цитата Сообщение от Someone007 Посмотреть сообщение
Using Constructors (C# Programming Guide)
Использование конструкторов (Руководство по программированию на C#)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
17.08.2019, 21:39
Цитата Сообщение от titan4ik Посмотреть сообщение
И вот весь код:
Если вам нужна реализация ICommand для WPF команд, то советую такую реализацию из поста Новая реализация RelayCommand
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.08.2019, 21:39
Помогаю со студенческими работами здесь

Определение полей вне конструктора
Когда я пишу класс class A { private int i = 5; } почему он не ругается на то, что я определяю...

Передача управления из конструктора класса-родителя в конструктор класса-потомка
Здравствуйте. Возможно ли передать управление из конструктора класса-родителя в конструктор класса-потомка? Например, есть класс...

Как обратиться из конструктора базового абстрактного класса к свойству-массиву класса наследника
Добрый день. Подскажите как обратиться из конструктора базового абстрактного класса к свойству-массиву из класса наследника. Вроде бы...

Вызов конструктора с другого проекта
Проблема в вызове конструктора 1 проекта для заполнения массива Класс 1 проекта public class Class1 { public int mas{get;set;} ...

Как передать параметры класса в вызов универсальной функции, для конструктора этого класса
Сложно описал, сейчас всё объясню. В ASP.NET, в файле Startup, подключаю модуль. services ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru