建立列舉
在某些情況下,Java Android 連結庫會使用整數常數來表示傳遞至連結庫屬性或方法的狀態。 對於廣泛散發的系結,將這些整數常數係結至 C# 中的列舉可能會很有用,以便為取用者提供較好的 API。
對於內部或低使用量系結,通常不值得設定這些系結,因為取用者只需使用係結常數,而不是列舉。
為了方便進行此對應,默認專案範本會將兩個檔案新增至系結專案:
EnumFields.xml - 此檔案會定義 Java 整數常數與 C# 列舉之間的對應
EnumMethods.xml - 此檔案會定義目前採用
int
方法參數或具有int
傳回型別的方法/屬性應該修改為改用列舉。
使用 EnumFields.xml 定義列舉
EnumFields.xml檔案包含 Java int
常數與 C# enums
之間的對應。 讓我們針對一組 int
常數建立下列 C# 列舉範例:
<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit">
<field jni-name="UNIT_SECOND" clr-name="Second" value="0" />
<field jni-name="UNIT_METER" clr-name="Meter" value="1" />
<field jni-name="UNIT_MILIWATT_HOURS" clr-name="MilliwattHour" value="2" />
</mapping>
在這裡,我們已取得 Java 類別SKRealReachSettings
,並在 命名空間Skobbler.Ngx.Map.RealReach
中定義名為 SKMeasurementUnit
的 C# 列舉。 專案field
會定義 Java 常數的名稱(範例)、列舉項目的名稱(exampleUNIT_SECOND
Second
),以及兩個實體所代表的整數值(範例0
)。
使用 EnumMethods.xml 定義 getter/setter 方法
EnumMethods.xml檔案允許將方法參數和從 Java int
常數傳回類型變更為 C# enums
。 換句話說,它會將 C# 列舉的讀取和寫入對應至 Java int
常數get
和set
方法(定義於 EnumFields.xml 檔案中)。
SKRealReachSettings
假設上面定義的列舉,下列EnumMethods.xml檔案會定義此列舉的 getter/setter:
<mapping jni-class="com/skobbler/ngx/map/realreach/SKRealReachSettings">
<method jni-name="getMeasurementUnit" parameter="return" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
<method jni-name="setMeasurementUnit" parameter="measurementUnit" clr-enum-type="Skobbler.Ngx.Map.RealReach.SKMeasurementUnit" />
</mapping>
第一 method
行會將Java getMeasurementUnit
方法的傳回值對應至 SKMeasurementUnit
列舉。 第二 method
行會將 的第一個參數 setMeasurementUnit
對應至相同的列舉。
有了上述所有變更,您就可以在適用於 Android 的 .NET 中使用下列程式代碼來設定 MeasurementUnit
:
realReachSettings.MeasurementUnit = SKMeasurementUnit.Second;