HomePhabricator

csharp: Make classes abstract and rework casting

Authored by lauromoura on Apr 5 2019, 3:53 PM.

Description

csharp: Make classes abstract and rework casting

Summary:
Abstract Eo classes are now proper C# abstract classes.

As a side effect, returning Eo instances from native code was reworked
to return instances of their actual Eo classes instead of previous
behavior of returning a generic Efl.Object and using static_cast.

Instead of var window = Efl.Ui.Win.static_cast(widget.GetParent());
Use var window = widget.GetParent() as Efl.Ui.Win;

Another side effect was that efl_constructor was removed from the list
of supported Efl.Object overrides. It is invoked inside
efl_add_internal_start, before the bindings makes the association of
the newly created EoId with the C# instance that created it, making the
managed delegate meaningless. C# users then can use regular C#
constructors to initialize fields.

Also changed to set the private data of C#-inherited classes before the
call to constructing methods (aka constructor parameters) so C# classes
can override them correctly.

Fixes T7778
Fixes T7757

Reviewers: vitor.sousa, felipealmeida, segfaultxavi

Reviewed By: vitor.sousa, segfaultxavi

Subscribers: cedric, reviewers, committers

Tags: efl

Maniphest Tasks: T7778, T7757, T7702

Differential Revision: https://phab.enlightenment.org/D8550