【发布时间】:2011-03-13 02:35:45
【问题描述】:
public class DTOa
{
public int Id { get; set;}
public string FirstName { get; set;}
}
public class DTOb: DTOa
{
public string Email { get; set;}
public string Password { get; set; }
}
public class a
{
protected DTOa _DTO = new DTOa();
public int Id
{
get
{
return _DTO.Id;
}
set
{
_DTO.Id = value;
}
}
public string FirstName
{
get
{
return _DTO.FirstName;
}
set
{
_DTO.FirstName = value;
}
}
public DTOa ToValueObject()
{
return _DTO;
}
}
public class b: a
{
protected DTOb _DTO = new DTOb();
public string Email
{
get
{
return _DTO.Email;
}
set
{
_DTO.Email = value;
}
}
public string Password
{
get
{
return _DTO.Password;
}
set
{
_DTO.Password = value;
}
}
public DTOb ToValueObject()
{
return _DTO;
}
}
现在让我们执行以下代码
public function test()
{
var a = new a();
var b = new b();
b.Id = 100;
b.FirstName = "Jim";
b.Email = "email@email.com";
b.Password = "test";
Console.WriteLine(b.ToValueObject().Dump());
}
问题是
-
我希望 b.ToValueObject 设置了所有属性,但实际上只从 DTOb 类获取属性(所以我的 FirstName 和 Id 属性为 NULL,但我明确设置)
dump: { Email: email@email.com, Password: test, Id: 0 }
任何想法为什么没有设置 ID 和 FirstName 没有设置?
DTOb 继承自 DTOa,因此“应该”包括 DTOa 的所有属性。它在代码级别上工作,所以如果我写
console.WriteLine(b.Firstname) - 我会得到正确的值,但是当我调用 ToValueObject() 方法时 - 它被删除了。
好的,这里是工作示例:
public class DTOa : IDTO
{
public int Id { get; set; }
public string FirstName { get; set; }
}
public class DTOb : DTOa, IDTO
{
public string Email { get; set; }
public string Password { get; set; }
}
public class a
{
protected IDTO _DTO;
public a()
{
_DTO = new DTOa();
}
public int Id
{
get
{
return (_DTO as DTOa).Id;
}
set
{
(_DTO as DTOa).Id = value;
}
}
public string FirstName
{
get
{
return (_DTO as DTOa).FirstName;
}
set
{
(_DTO as DTOa).FirstName = value;
}
}
public DTOa ToValueObject()
{
return (_DTO as DTOa);
}
}
public class b : a
{
public b()
{
_DTO = new DTOb();
}
public string Email
{
get
{
return (_DTO as DTOb).Email;
}
set
{
(_DTO as DTOb).Email = value;
}
}
public string Password
{
get
{
return (_DTO as DTOb).Password;
}
set
{
(_DTO as DTOb).Password = value;
}
}
public DTOb ToValueObject()
{
return _DTO as DTOb;
}
}
【问题讨论】:
-
dmitry - 如果你很幸运在你的商店里有另一个 oo dvlp 有更多经验,打印这个页面,研究其中的废话,并与他们见面 1/2 小时.在您尝试的前几次尝试中,不可能正确地获得程序的课堂布局 - 这里有一些经典(并且可以理解的新 oo 工程师)设计失误,并且与一个去过那里的真人交谈是任何书都无法击败的或网页。关键 - 15 分钟后,请他们帮助您正确设计。不会在第一次 b/c 时出错,因为它太贵了,而且你永远生活在不可能的代码中。
标签: c# .net inheritance properties