Android-(button.Click + = event;)和(button.SetOnClickListener(this))有什么区别?

时间:2018-12-08 12:53:44

标签: android xamarin events button interface

他们都做同样的工作-定义单击按钮时会发生什么。 那么,两者的真正区别是什么?

1 个答案:

答案 0 :(得分:0)

Xamarin在Android(和iOS)框架内的许多地方创建C#包装程序,以将平台的本机方法标准化为标准.Net / C#约定。

#version 430 compatibility #extension GL_ARB_compute_shader : enable #extension GL_ARB_shader_storage_buffer_object : enable layout(std140, binding = 4) buffer Pos { vec4 Positions[]; // array of structures }; layout(std140, binding = 5) buffer Vel { vec4 Velocities[]; // array of structures }; uniform float dt; layout(local_size_x = 128, local_size_y = 1, local_size_z = 1) in; void main() { uint numParticule = gl_GlobalInvocationID.x; vec4 v = Velocities[numParticule]; vec4 p = Positions[numParticule]; vec4 tmp = vec4(0, -9.81, 0,0) + v * (0.001 / (7. / 1000.)); v += tmp ; Velocities[numParticule] = v; p += v ; Positions[numParticule] = p; } 是本机Java方法,而C#SetOnClickListener是本机方法的Click包装器。

Click事件处理程序背后的代码:

EventHandler

您可以在代码中看到,public event EventHandler Click { add { EventHelper.AddEventHandler (ref weak_implementor_SetOnClickListener, (Func<IOnClickListenerImplementor>)__CreateIOnClickListenerImplementor, (Action<IOnClickListener>)SetOnClickListener, (Action<IOnClickListenerImplementor>)delegate (IOnClickListenerImplementor __h) { __h.Handler = (EventHandler)Delegate.Combine (__h.Handler, value); }); } remove { EventHelper.RemoveEventHandler (ref weak_implementor_SetOnClickListener, (Func<IOnClickListenerImplementor, bool>)IOnClickListenerImplementor.__IsEmpty, (Action<IOnClickListener>)delegate { SetOnClickListener (null); }, (Action<IOnClickListenerImplementor>)delegate (IOnClickListenerImplementor __h) { __h.Handler = (EventHandler)Delegate.Remove (__h.Handler, value); }); } } 是更有效的方法,因为它避免了包装程序。