我有课

public ViewController1 (IntPtr handle) : base (handle){}

ViewController1.designer.cs 里面我注册了一个 UITextField
[Outlet]
UIKit.UITextField _textField { get; set; }

这是我挣扎的地方:

我有另一个类,ViewController2,它继承自 ViewController1
public class ViewController2 : ViewController1
{
    public ViewController2 (IntPtr handle) : base (handle){}
}

为什么在 ViewController2 内部调试时我的 _textField 总是 null

最佳答案

你初始化 _textField 了吗?像 _textField = new UIKit.UITextField(); 。因为在创建类时所有字段都为空。创建 ViewController1ViewController2 后, _textField 为空,除非您在构造函数中为其赋值。

更准确地说,每个字段 T field 都被初始化为 default(T) ,对于引用类型,它是 null

顺便说一句:你的“领域”是一个属性(property)。但汽车属性也是如此。

您可以在构造函数中像这样初始化 _textField:

public partial class ViewController1
{
    public ViewController1 (IntPtr handle)
        : base(handle)
    {
        _textField = new UIKit.UITextField();
    }
}

我必须承认我不知道 xamarin。你必须在构造函数中调用类似 InitializeComponent(); 的东西吗? ViewController1.designer.cs 有这样的方法吗?
    public ViewController1 (IntPtr handle)
        : base(handle)
    {
        InitializeComponent();
    }

例如,在 WinForms 中,设计器分部类有这样一个方法,用于创建控件。

10-07 19:44