Прежде всего, просмотрите документацию по ключевому слову explicit
.
Указывает, что конструктор или функция преобразования (начиная с C ++ 11) явные, то есть ее нельзя использовать для неявных преобразований и инициализации копирования.
blockquote>По сути, явный конструктор копирования означает, что конструктор копирования не будет вызываться неявно.
Вам не нужно определять ваш конструктор копирования / перемещения, компилятор сгенерирует их для вас. То же самое для копирования / перемещения. Просто удалите их, и все будет в порядке.
class foo { public: foo() = default; explicit foo(int val): _a(val) {} int a() const { return _a; } void a(int val) { _a = val; } private: int _a{0}; };
Быстрое и грязное решение включить произвольную коммуникацию управления состоит в том, чтобы использовать рекурсивное управление находкой и события. Имейте поиск средств управления дерево управления типом управления для того, в чем они нуждаются и затем подписывают на публично выставленные события на управлении публикацией.
Я имею предыдущий, использовал прием, чтобы позволить стандартному управлению сервером найти друг друга при встраивании в системы CMS от различных поставщиков для предотвращения определенной коммуникации API полностью.
Я не вижу ничто плохого с webpart получение ссылки на webpart B и вызов общедоступных/внутренних методов/свойств или подписку обработчиков общественности/внутренним событиям. Одна точка упоминания при выполнении этого, хотя: EnsureChildControls. Я засвидетельствовал своими глазами один webpart, выполняемый ясный PreRender, в то время как другой webpart даже не выполнил CreateChildControls.
От webpart A, выберите свою ссылку на webpart B (в этом случае webpart B, имеет Календарь типа) как так:
private Calendar _calendarWP = null;
public Calendar CalendarWP
{
get
{
if (_calendarWP != null)
return _calendarWP;
else
foreach (System.Web.UI.WebControls.WebParts.WebPartZone zone in this.WebPartManager.Zones)
foreach (System.Web.UI.WebControls.WebParts.WebPart webpart in zone.WebParts)
if (webpart is Calendar)
{
_calendarWP = (Calendar)webpart;
_calendarWP.EnsureChildControls();
return _calendarWP;
}
return null;
}
}
Теперь можно сделать, вещам нравится, выбирают некоторые новые данные и обновляют Календарь как так:
IEnumerable newData = SomeDataProvider.GetNewData(args);
CalendarWP.someGridView.DataSource = newData;
CalendarWP.someGridView.DataBind();
Или, возможно, позвольте webpart бросок ссылка на себя к webpart B, таким образом, это может использовать webpart A общедоступные/внутренние свойства для движения данных выборки для себя:
CalendarWP.UseWPAToFetchData(this);