zoukankan      html  css  js  c++  java
  • C#中父类的值向子类复制

    架设有两个类AParent和AChild。

    其中,AChild派生自AParent。

    AParent这个类来自于数据库,由ORM为我们生成和创建。而AChild这个类主要是为了配合前台页面的显示【通常在MVC中实现编辑功能时用到。】

    根据面向对象的原理,我们可以拿“子类”当“父类”使用。但是不能拿“父类”当“子类”使用。

    举一个很简单的例子。比如我们有两个方法:GetParentName(AParent parent)和GetChildName(AChild child)。

    那么,当我们调用GetParentName方法时,将AChild的实体作为参数调用是可行等。

    但是当我们调用GetChildName方法时,确不能将AParent的实体作为参数来调用。

    有时候,为了满足前台显示的要求,我们必须使用AChild作为Model。但是从ORM中得到的是AParent,不能直接传递给视图。这样的话,程序员就不得不编写N行冗长而且毫无趣味的代码,来满足这个“合理的要求”。

    但是,如果你是一个聪明的程序员,是一个懂得生活的程序员,是一个懂得对自己好的程序员,那么,上面所诉说的事情,你是绝对不会让它发生的。

    虽然,我承认,上面的三条我不一定能够百分之百做到,但是,有一件事情是肯定的:我绝对不允许这样的事情发生!

    懂得对自己好的程序员,才是一个合格的程序员。   来自:大石头。

    我们可以这么考虑,既然AChild派生自AParent,那么也就是说,AParent所拥有的所有的属性,方法,在AChild中,都是有的。那么,我们就可以通过“反射”,来解决这个问题。

    可能一提到“反射”,立马就会有很多人发表见解:“哎呀,反射的效率不高啊……”,“反射的速度慢呀……”。

    每每看到这些评论,我总是一笑而过。“反射”是很慢。但是,在任何情况下都很慢吗?任何技术,只要用对了场景,那么就是一个很好的技术。

    需要用到AParent向AChild复制的环境是在编辑状态下。而且我现在所开发的是后台。一个后台能有多少个人使用?后台的编辑功能每秒有多少个需求?耗时百毫秒级别的反射对于整个后台程序来说,难道不微不足道吗?

    ====牢骚的话就此打住,咱们该整个硬菜====

    其实,核心代码并没有多少,短短的五六行即可。但是这短短的五六行却蕴含了两个知识点:泛型,反射。有什么不清楚的尽可能提出来。知无不答。

            public static TChild AutoCopy<TParent, TChild>(TParent parent) where TChild : TParent, new()
            {
                TChild child = new TChild();
                var ParentType = typeof(TParent);
                var Properties = ParentType.GetProperties();
                foreach (var Propertie in Properties)
                {
                    //循环遍历属性
                    if (Propertie.CanRead && Propertie.CanWrite)
                    {
                        //进行属性拷贝
                        Propertie.SetValue(child, Propertie.GetValue(parent, null), null);
                    }
                }
                return child;
            }
    

      

    欢迎来到:码农很忙
  • 相关阅读:
    TabControl 切换 内嵌web页面直接响应滚动事件
    进程、应用程序域和对象上下文
    CSharp中的多线程——线程同步基础
    CSharp中的多线程——入门
    注重实效的程序员之快速参考指南
    学习语言技术快速入门——五步骤
    利用jQuery选择将被操作的元素
    CSharp中的多线程——使用多线程
    android开发文件介绍
    三角函数公式
  • 原文地址:https://www.cnblogs.com/Soar1991/p/2754319.html
Copyright © 2011-2022 走看看