加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

接口实现C#与Java的差异

发布时间:2020-12-15 23:34:26 所属栏目:百科 来源:网络整理
导读:我已经为一个 java库创建了一个绑定,它作为扫描仪SDK的一部分提供,模型是Honeywell Dolphin CT50.但是,在我的理解中,我遇到了一些问题. 以下示例在Java中给出. Create方法需要一个接口实现.但是,我还没有意识到在仍然访问类范围变量时覆盖接口的’onCreated
我已经为一个 java库创建了一个绑定,它作为扫描仪SDK的一部分提供,模型是Honeywell Dolphin CT50.但是,在我的理解中,我遇到了一些问题.

以下示例在Java中给出. Create方法需要一个接口实现.但是,我还没有意识到在仍然访问类范围变量时覆盖接口的’onCreated’方法的类似方法.这是我遇到麻烦,我怎么能在C#中做到以下几点.

Java的:

private static BarcodeReader barcodeReader;
private AidcManager manager;

public void onCreate(Bundle savedInstanceState) {
    // create the AidcManager providing a Context and a
    // CreatedCallback implementation.
    AidcManager.create(this,new CreatedCallback() {
        @Override
        public void onCreated(AidcManager aidcManager) {
            manager = aidcManager;
            barcodeReader = manager.createBarcodeReader();
        }
    });

}

在.NET中,编译器不会像上面那样执行并将接口实现为匿名类型,因此我必须实现接口.但是,我怎么能分配类宽变量?

我的C#:

NameSpace Scanner {
    private static BarcodeReader barcodeReader;
    private AidcManager manager;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

       CreateCallback callback = new CreateCallback() {  };
       AidcManager.Create(this,callback.OnCreated(AidcManager aidcManager));
    }

public class CreateCallback : AidcManager.ICreatedCallback
{
    public IntPtr Handle
    {
        get
        {
            throw new NotImplementedException();
        }
    }
    public void Dispose()
    {
        throw new NotImplementedException();
    }
    public void OnCreated(AidcManager p0)
    {
        // How can I initialize the manager and barcode reader variables in the class above from here?
    }
  }
}

解决方法

您可以创建一个回调实现CreateCallback,它具有另一个回调作为构造函数参数successAction.传递回调的OnManagerCreated将在OnCreated的CreateCallback中调用.

重要说明:如果实现Java接口,则必须从Java.Lang.Object继承.不要自己实现Handle和Dispose().

活动

public class MyActivity : Activity 
{
    private static BarcodeReader _barcodeReader;
    private AidcManager _manager;
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        // Set our view from the "main" layout resource
        SetContentView(Resource.Layout.Main);

        CreateCallback callback = new CreateCallback(OnManagerCreated) {  };
        AidcManager.Create(this,callback);
    }

    private void OnManagerCreated(AidcManager manager)
    {
        _manager = manager;
        _barcodeReader = manager.CreateBarcodeReader();
    }
}

回调实现

public class CreateCallback : Java.Lang.Object,AidcManager.ICreatedCallback
{
    private Action<AidcManager> _successAction;
    public CreateCallback(Action<AidcManager> successAction)
    {
        _successAction = successAction;
    }

    public void OnCreated(AidcManager p0)
    {
        _successAction(p0);
    }
}

其他可能性

您也可以直接在您的活动类中实现界面

public class MyActivity : Activity,AidcManager.ICreatedCallback 
{
    // ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读