Abstract类的Null属性值

时间:2015-02-25 10:41:00

标签: c# 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中的代码并抛出异常时,该属性为null。

那么,是否有人知道如何在SumProperty中使ChildClass可用,并使其能够返回在AbstractClass的构造函数中设置的SumObject?

我之前已经看过这件事,但我对它是如何完成的方式模糊不清。

再次感谢你们!

2 个答案:

答案 0 :(得分:0)

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

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();
    }
}

答案 1 :(得分:0)

我只是复制你的代码来运行它运行良好。

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();
    }
}

我的名字是:詹姆斯迪恩