摘要 class 中的空 属性 值

Null property value from Abstract class

对于我正在处理但无法找到解决方案的以下场景,我将不胜感激。如果标题也与当前的行话不符,我深表歉意。

以下代码是我正在使用的示例:

public class SumObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public abstract class AbstractClass
{
    protected SumObject SumProperty { get; private set; }

    protected AbstractClass()
    {
        SetupSumObjecInAbstractClass();
        DoWorkInChildClass();
    }

    protected void SetupSumObjecInAbstractClass()
    {
        SumProperty = new SumObject() { ID = 1, Name = "James Dean" };
    }

    protected abstract void DoWorkInChildClass();
}

public class ChildClass : AbstractClass
{
    protected override void DoWorkInChildClass()
    {
        if (SumProperty == null)
            throw new Exception("Dang!");

        Console.WriteLine(string.Format("My Name is: {0}"
                                        , SumProperty.Name));
    }
}

因此,在此示例中,当 ChildClass 被实例化时 [var name = new ChildClass();] AbstractClass 设置包含 SumObject 的 属性 然后调用其构造函数中的 DoWorkInChildClass() 。但是,我发现当执行 ChildClass 中的代码并抛出异常时 属性 为空。

那么,有没有人知道如何使 SumPropertyChildClass 中可用并将其启用到 return 在 [=15= 的构造函数中设置的 SumObject ]?

我以前见过这种做法,但我不清楚具体是怎么做到的。

再次感谢大家!

也许这会有所帮助(请注意我删除了您使用的抽象方法):

public class SumObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

    public abstract class AbstractClass
    {
        protected SumObject SumProperty { get; private set; }

        protected AbstractClass()
        {
            SetupSumObjecInAbstractClass();
        }

        protected void SetupSumObjecInAbstractClass()
        {
            SumProperty = new SumObject() { ID = 1, Name = "James Dean" };
        }
    }


    public class ChildClass : AbstractClass
    {
        public ChildClass() : base()
        {
             Console.WriteLine(string.Format("My Name is: {0}"
                                            , SumProperty.Name));
        }
    }

class Program
{
    static void Main()
    {
        ChildClass c = new ChildClass();
    }
}

我只是将您的代码复制到 运行 并且运行良好。

public class SumObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public abstract class AbstractClass
{
    protected SumObject SumProperty { get; private set; }

    protected AbstractClass()
    {
        SetupSumObjecInAbstractClass();
        DoWorkInChildClass();
    }

    protected void SetupSumObjecInAbstractClass()
    {
        SumProperty = new SumObject() { ID = 1, Name = "James Dean" };
    }

    protected abstract void DoWorkInChildClass();
}

public class ChildClass : AbstractClass
{
    protected override void DoWorkInChildClass()
    {
        if (SumProperty == null)
            throw new Exception("Dang!");

        Console.WriteLine(string.Format("My Name is: {0}"
                                        , SumProperty.Name));
        Console.ReadKey();
    }
}
class Program
{
    static void Main(string[] args)
    {
        var name = new ChildClass();
    }
}

我叫:詹姆斯·迪恩