导出的WinForm中的奇怪无效成员

时间:2012-06-05 19:53:49

标签: c# winforms

我有以下Winforms层次结构。

Form ==> AForm ==> BForm

int? X;中定义了无效成员AForm。在BForm中,有以下代码。

public partial class BForm : AForm, IBview
{
    ......
    public int Y
    {
        get
        {
            int z = X ?? 0;
            System.Diagnostics.Debug.WriteLine("X: " + X.ToString() + " z: " + z.ToString());
            return z;
        }
    }

X不应为null。我正在尝试关闭并打开表单BForm。它通常有效,偶尔z为零(可能每10次一次)。我在z==0行有一个return z的条件中断。

当破发点被击中时。调试写

    X:  z: 0

但是,在点击中断后,当我将鼠标光标悬停在visual studio中的X上时,X的值既不为null也不为0。

2 个答案:

答案 0 :(得分:0)

如果X可以为空(即int? X - 那么,它的值是通过X.Value获得的。您还可以查看:

int z = X.HasValue ? X.Value : 0;

或者,您可以投射X - (int)X - 但您要先检查是否X.HasValue。否则,我相信如果X尚未初始化,你将得到一个null异常。

答案 1 :(得分:0)

检查BForm本身的初始化。仅仅因为BForm从AForm继承了值,这并不意味着这些值保存来自其他AForm对象实例的物理值除非您自己设置这些值

它与如何创建BForm实例有关。像这样:

AForm A = new Aform(someValueForX);
BForm B = A;

OR

BForm B = new AForm(someValueForX);

在这些情况下,B.X将具有与A.X相同的值,并且对于继承规则,应允许赋值。但是如果X没有在声明中的某个地方初始化,那么X对于你正在查看的BForm的特定实例没有任何价值,即使它在某些其他AForm实例中可能有值。