我真的很感激我在以下方案中提供帮助,但我无法找到解决方案。如果标题与当前的术语不匹配,我很抱歉。
以下代码是我工作的一个例子:
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?
我之前已经看过这件事,但我对它是如何完成的方式模糊不清。
再次感谢你们!
答案 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();
}
}
我的名字是:詹姆斯迪恩