在MonoTouch和MonoDroid中使用C#对ObjC和类进行子类化

时间:2011-08-16 10:09:36

标签: android ios mono xamarin.ios xamarin.android

我即将评估MonoTouch和MonoDroid来统一我们的开发,但我不确定我是否得到了两个子类的子类。 MonoTouch和MonoDroid http://ios.xamarin.com/Documentation/API_Design#Design_Principles的文档说明您可以从ObjC和Java代码创建子类。

这是否意味着我实际上可以将现有的非框架代码视为自定义UI元素或现有业务逻辑,并在C#中创建它的子类以在我的项目中使用?一个例子会很棒,因为我没有丝毫关于单声道和C#的工作原理。

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,你可以!这是Miguel的GlassButton MonoTouch的一个例子。

正如您所看到的,它继承自本地iOS UIButton的托管绑定,并从那里可以覆盖其方法,就像您在C#中所期望的那样。

 public class GlassButton : UIButton {
    ...

    public override bool BeginTracking (UITouch uitouch, UIEvent uievent)
    {
       SetNeedsDisplay ();
       pressed = true;
       return base.BeginTracking (uitouch, uievent);
    }
    ...

您可以通过绑定自己的UI(或非UI)代码然后将其用作普通的C#代码(并继承,覆盖......它)来执行相同的操作。

MonoTouch和Mono for Android的绑定代码是不同的,但一旦完成,它们都是一样的(C#明智的)。

答案 1 :(得分:0)

  

这是否意味着我可以实际使用现有的非框架代码,如自定义UI元素或现有业务逻辑,并在C#中创建它的子类以在我的项目中使用?

如果我理解你,也许吧。 : - )

在MonoTouch中,您可以通过binding the Objective-C type to a C# type,然后继承绑定的C#类型。这非常灵活,允许从C#继承〜任何Objective-C类型。 (不需要绑定例如UIKit类型,因为它们已经绑定在monotouch.dll中。)

Mono for Android中的等价物 - 在C#中继承“随机”Java类 - 目前无法实现。 C#代码只能子类化并实现Mono.Android.dll中的接口(它绑定android.jar中的类型)。正在努力在将来的版本中放宽这一限制。