摘要 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
中的代码并抛出异常时 属性 为空。
那么,有没有人知道如何使 SumProperty
在 ChildClass
中可用并将其启用到 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();
}
}
我叫:詹姆斯·迪恩
对于我正在处理但无法找到解决方案的以下场景,我将不胜感激。如果标题也与当前的行话不符,我深表歉意。
以下代码是我正在使用的示例:
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
中的代码并抛出异常时 属性 为空。
那么,有没有人知道如何使 SumProperty
在 ChildClass
中可用并将其启用到 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();
}
}
我叫:詹姆斯·迪恩