【问题标题】:Subclassing ObjC and classes with C# in MonoTouch and MonoDroid在 MonoTouch 和 MonoDroid 中使用 C# 子类化 ObjC 和类
【发布时间】:2011-08-16 10:09:35
【问题描述】:

我即将评估 MonoTouch 和 MonoDroid 以统一我们的开发,但我不确定我是否正确地对这两者进行了子类化。 MonoTouch 和 MonoDroid http://ios.xamarin.com/Documentation/API_Design#Design_Principles 的文档说您可以从 ObjC 和 Java 代码创建子类。

这是否意味着我实际上可以采用现有的非框架代码(如自定义 UI 元素或现有业务逻辑)并在 C# 中创建它的子类以在我的项目中使用?一个例子会很好,因为我一点也不知道它是如何与单声道和 C# 一起工作的。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    是的,你可以!这是 Miguel 的 MonoTouch GlassButton 示例。

    如您所见,它继承自原生 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 和 Android 的 Mono 的绑定代码不同,但一旦完成,就完全一样(C# 方面)。

    【讨论】:

    • 您好 poupou,非常感谢您的详细回答。这似乎比我预期的要容易得多……或者担心。现在我们真的必须编写一个测试应用程序。 ;)
    【解决方案2】:

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

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

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

    Android 的 Mono 中的等价物——在 C# 中子类化一个“随机”Java 类——目前是不可能的。 C# 代码只能子类化类型并实现在Mono.Android.dll 中找到的接口(它绑定在android.jar 中找到的类型)。正在努力在未来的版本中放宽此限制。

    【讨论】:

    • 您好 jonp,感谢您的回答。您确定 Android 缺少子类化吗?因为如果我正确理解@poupou,它应该是可能的:“MonoTouch 的绑定代码和Android 的Mono 是不同的,但是一旦完成,它都是一样的(C# 明智的)。”
    • @brejoc:MonoTouch 和 Mono for Android 的工作方式非常不同。 :-) 从 1.2.0 开始,C# 代码不可能子类化“未绑定”Java 类型(Mono.Android.dll 之外的任何内容),因为无法告诉 .java 生成器“不要生成这种类型的包装器。”这将在即将发布的 1.9 版本中进行更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多