接口实现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 { // ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |