我将Android Studio项目移植到Visual Studio / Xamarin。 我有这个Java代码:
public class EmployeeDataContract {
public EmployeeDataContract() { }
public static abstract class EmployeeDataEntry implements BaseColumns {
public static final String TABLE_NAME = "tblEmployeeData"; // Local SQLLite table
public static final String COLUMN_NAME_LOCAL_ID = "_id";
翻译成C#:
public class EmployeeDataContract {
public EmployeeDataContract() {}
public abstract class EmployeeDataEntry : BaseColumns { // had to remove "static"
public const string TABLE_NAME = "tblEmployeeData"; // Local SQLLite table
public const string COLUMN_NAME_LOG_ID = "_id";
Visual Studio提供编译错误:
BaseColumns不包含带0参数的构造函数
那么我去查看BaseColumns
并且它不包含构造函数,也不继承类(可能有构造函数),因此它继承自Object
,应该有一个带0参数的构造函数。
有什么问题?
答案 0 :(得分:1)
此处有关于此行为的错误报告:https://bugzilla.xamarin.com/show_bug.cgi?id=36791
基本上在Java中,这个接口只包含两个常量,定义了id和count列的名称。在C#接口中不能包含常量,因此这些常量会移动到您看到的抽象类。它不能被继承(在其他程序集中),因为它只有构造函数是内部的,子类应该调用父的构造函数。由于此接口仅包含 常量,因此xamarin不会为其生成(空)接口。
如果您手动移植代码(不绑定到Java库) - 也许您可以忽略继承此类,因为它无论如何都不提供任何有用的东西。当然,另一些代码可能只接受这个类的实例,但这不太可能。