C#多态性问题
发布时间:2020-12-16 00:12:21 所属栏目:百科 来源:网络整理
导读:我有一个名为: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.
我有一个名为: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中获得新扩展的属性(示例中的名称). 解决方法
当B继承A时,它已经拥有DTO属性.所以问题实际上是你隐藏了这个继承.您不需要B类中的新属性,只需在类构造函数中设置它即可.
public class B : A { public B() { this.D = new MyDTO(); } } 但是,在您的主要课程中,您需要在您的属性中进行显式转换,就像下面一样,因为DTO没有“Name”属性. static void Main(string[] args) { B b = new B(); b.D.ID = 1; ((MyDTO)b.D).Name = "4"; MyBLMethod(b); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |