Встраивание свойств и действий библиотеки .NET в Android AAR - PullRequest
0 голосов
/ 20 марта 2019

Я добавляю существующую библиотеку Xamarin.Android .NET в собственный проект Android Studio.Я следую указаниям https://docs.microsoft.com/en-us/xamarin/tools/dotnet-embedding/, и все работает хорошо, но у меня есть вопрос, не будучи экспертом по Java: можно ли экспортировать в Java свойства и действия C #, присутствующие в моих библиотеках (например, * 1003?)* ReturnAnyText )?

namespace export_test
{
    [Register("export_test.ClassToExport")]
    public class ClassToExport 
    {
        [Export("ClassToExport")]
        public ClassToExport()
        {
            // ...
        }

        [Export("DoSomething")]
        public void DoSomething()
        {
            // ...
        }

        public Action<string> ReturnAnyText { get; set;}
    }
}

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

Самое простое решение, которое я нашел, - не пытаться экспортировать делегаты C #, а просто вернуть объект, содержащий возвращаемые значения, в конце выполнения метода:

namespace export_test
{
    [Register("export_test.ClassToExport")]
    public class ClassToExport 
    {
        [Export("ClassToExport")]
        public ClassToExport()
        {
            // ...
        }

        [Export("DoSomething")]
        public MyResult DoSomething()
        {
            // ...
        }
    }

    [Register("export_test.MyResult")]
    public class MyResult
    {
        private string _Text;
        private int _Value;

        [Export("MyResult")]
        public MyResult(string text, int val)
        {
            _Text = text;
            _Value = val;
        }

        [Export("GetText")]
        public string GetText() { return _Text; }

        [Export("GetValue")]
        public int GetValue() { return _Value; }
    }
}
0 голосов
/ 20 марта 2019

Свойством под капотом являются только методы get_PropertyName () и set_PropertyName ().Так что да, вы также должны иметь возможность экспортировать их:

Это будет выглядеть примерно так:

public bool MyProp
{
    [Export]
    get;
    [Export]
    set;
}

Или, если вы хотите назвать их:

public bool MyProp
{
    [Export("GetMyProp")]
    get;
    [Export("SetMyProp")]
    set;
}
...