我将现有的Xamarin.Android .NET库添加到原生Android Studio项目中。我正在关注https://docs.microsoft.com/en-us/xamarin/tools/dotnet-embedding/上的指示并且一切正常,但我有一个问题不是Java专家:是否也可以将我的库中存在的C#属性和操作导出到Java(如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;}
}
}
引擎盖下的属性只是get_PropertyName()和set_PropertyName()方法。所以是的,你也应该能够导出它们:
这看起来像是这样的:
public bool MyProp
{
[Export]
get;
[Export]
set;
}
或者如果你想给它们命名:
public bool MyProp
{
[Export("GetMyProp")]
get;
[Export("SetMyProp")]
set;
}
我发现最简单的解决方案是不尝试导出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; }
}
}