【发布时间】:2009-11-06 22:17:52
【问题描述】:
我有一个名为:A 的 BL 类,名为:DTO 的 DTO 类。现在假设我想在我的 DTO 中添加更多属性。所以我从我现有的 DTO 中派生出一个新的 DTO 类并为其添加属性。下面是代码:
namespace TestConsole
{
class test
{
static void Main(string[] args)
{
B b = new B();
b.D.ID = 1;
b.D.Name = "4";
MyBLMethod(b);
}
static void MyBLMethod(A b)
{
MyDALMethod(b.D);
}
static void MyDALMethod(DTO dto)
{
int i = dto.ID;
string name = ((MyDTO)dto).Name;//I could not do this
//because i will get object cast error as i can't cast from
//parent to child
}
}
public class DTO
{
public int ID = 99;
public DTO()
{
}
public DTO(DTO source)
{
ID = source.ID;
}
}
public class MyDTO : DTO
{
public string Name = "";
public MyDTO() { }
public MyDTO(MyDTO source)
: base(source)
{
Name = source.Name;
}
}
public class A
{
private DTO _d;
public A()
{
D = new DTO();
}
public DTO D
{
get { return _d; }
set { _d = value; }
}
}
public class B : A
{
private MyDTO _md;
public B()
{
_md = new MyDTO();
}
public MyDTO D
{
get { return _md; }
set { _md = value; }
}
}
}
从 Main(您可以将其视为 UI)我正在调用 MyBLMethod(存在于 BL 存储库中)并将类对象传递给它,并且从 BL 存储库我正在调用我的 DAL。在 DAL 我写了这个:
static void MyDALMethod(DTO dto)
{
int i = dto.ID;
string name = ((MyDTO)dto).Name;//I could not do this
//because i will get object cast error as i can't cast from
//parent to child
}
您能否建议我如何在我的 DAL 中获取新扩展的属性(示例中的名称)。
【问题讨论】:
-
你确定转换会抛出异常吗?
-
是的,上面的转换将抛出“无法将'TestConsole.DTO'类型的对象转换为'TestConsole.MyDTO'”异常。
标签: c# architecture