使用Xamarin中的Android Bindings使类实现接口

时间:2016-06-21 20:21:52

标签: c# android xamarin

我正在使用Xamarin开发Android应用程序。对于这个应用程序,我需要使用两个 .jar 库。这些库与完全相同,不同之处仅在于一个应该在生产环境中使用,另一个用于开发用途。

该应用程序的一个要求是,它必须具有用户可以设置的配置,以指定环境(生产或开发)。

我需要与这些库中的一类进行交互(我们称之为Foo)。如果我需要使用C#创建该类,我将首先创建一个名为IFoo的接口,然后创建实现该接口的两个类,然后我将使用 factory 来创建正确的实例基于用户设置的偏好。但问题是,在 Java 库中,这两个类都直接从Object继承,因此我的调用代码将无法使用我想要的抽象。

我想知道,是否可以使用元数据转换来修改生成的代码,以使类实现接口。我能够通过修改生成的代码使其工作,但每次重新编译项目时,我都会错过修改。

1 个答案:

答案 0 :(得分:1)

您生成的课程为partial。这意味着您可以轻松扩展它们。

<强>产生

[global::Android.Runtime.Register ("com/bar/baz/Foo", DoNotGenerateAcw=true)]
public partial class Foo : global::Java.Lang.Object {

}

<强>除了

将此(Foo.cs)添加到文件夹Additions

public partial class Foo : IFoo 
{
    public void WhatEverFooDoes() 
    {
        // implement me
    }
}

IFoo也可以定义由生成的代码实现的方法。因此,如果签名完全相同,您只需要从其中一个类中提取接口。