0

我正在从 AAR 库创建绑定库,以便生成可以在 Xamarin.Android 项目中使用的 dll。

我有一个问题,因为 Java 授权的语法在 C# 中没有得到授权

您将如何用 C# 编写此 Java 代码?

   public interface IParent{
   }

   public interface IChild extends IParent{
   }

   public interface IGetter{
       IParent getAttribute();
   }

   public class MyClass implements IGetter{
       public IChild getAttribute() {
           return null;
       }
   }

生成的自动绑定文件给了我这个结果之王,未授权

   public interface IParent
   {
   }

   public interface IChild : IParent
   {
   }


   public interface IGetter
   {
       IParent Attribute { get; }
   }

   public class MyClass : IGetter
   {
       public IChild Attribute { get; }    //Not allowed but is the exact Java equivalent
       //public IParent Attribute { get; }    //Allowed but not the exact Java equivalent
   }

我收到以下错误:

'MyClass' does not implement interface member 'IGetter.Attribute'. 'MyClass.Attribute' cannot implement 'IGetter.Attribute' because it does not have the matching return type of 'IParent'.

我正在考虑创建一个完整的类来在 IChild 和 IParent 之间架起一座桥梁,但它必须是另一个更合适的解决方案......

4

1 回答 1

0

谢谢@fredrik

这是我根据您的评论找到的解决方案:

public interface IParent
{
}

public interface IChild : IParent
{
}


public interface IGetter<T> where T : IParent
{
    T Attribute { get; }
}

public class MyClass : IGetter<IChild>
{
    public IChild Attribute { get; }   
}

使用模板确实是解决方案。

于 2021-06-29T10:33:20.083 回答