主要是为了应付不同类之间成员的相互赋值。节省代码量。

namespace ConsoleApplication3
{public interface interTest{}public class Test : interTest{public string Name;public int Id;public int TestId;public int Property { get; set; }}public class TestClone{public string Name;public int Id;public int CloneId;public int Property { get; set; }}public static class Logic{public static MemberTypes AllowType = MemberTypes.Field | MemberTypes.Property;public static void CloneField<T, T1>(this T instance, T1 copyTo) where T : class ,interTest, new(){var instanceType = instance.GetType();var copyType = copyTo.GetType();var copyField = copyType.GetFields();instanceType.GetFields().All(field =>{var temp = copyField.FirstOrDefault(o => o.Name.Equals(field.Name, StringComparison.CurrentCulture) && o.FieldType == field.FieldType);if (temp == null) return true;temp.SetValue(copyTo, field.GetValue(instance));return true;});}public static void CloneProperty<T, T1>(this T instance, T1 copyTo) where T : class ,interTest, new(){var instanceType = instance.GetType();var copyType = copyTo.GetType();var copyProperties = copyType.GetProperties();instanceType.GetProperties().All(property =>{var temp = copyProperties.FirstOrDefault(o => o.Name.Equals(property.Name, StringComparison.CurrentCulture) && o.PropertyType == property.PropertyType);if (temp == null) return true;temp.SetValue(copyTo, property.GetValue(instance, null), null);return true;});}}
}

调用
class Program{static void Main(string[] args){Test t = new Test();t.Id = 1;t.Name = "shikyoh";t.TestId = 12;t.Property = 600;TestClone tc = new TestClone();t.CloneField(tc);t.CloneProperty(tc);Console.WriteLine("tc.Name:" + tc.Name);Console.WriteLine("tc.Id:" + tc.Id);Console.WriteLine("tc.Property:" + tc.Property);Console.WriteLine("tc.CloneId:" + tc.CloneId);}}

注意 类的名称必须相同,并且类型必须相同。

转载于:https://www.cnblogs.com/shikyoh/archive/2012/04/11/2442651.html

类与类之间 相同属性及字段拷贝相关推荐

  1. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  2. odoo13中的模型类(模型属性、字段属性、字段类型)

    目录 1.模型属性 2.字段类型 3.字段通用参数属性 1.模型属性 模型属性 解释 _name 模型名称.使用点表示法.规范命名带模块命名空间,格式:模块名.xxx.xxx.xxx: _descri ...

  3. scala java 区别_Scala(和Java)中的类和类型之间有什么区别?

    当您说"类型"时,我将假设您主要是指静态类型. 但是我将在短期内讨论动态类型. 静态类型是可以被静态证明的程序一部分的属性(静态表示"不运行它"). 在静态类型 ...

  4. C# 子类实例化基类 基类使用不了子类的方法_C#中的类、方法和属性

    这节讲C#中的类,方法,属性.这是面向对象编程中,我们最直接打交道的三个结构.    类: 类(class)是面向对象中最基本的单元,它是一种抽象,对现实世界中事物的抽象,在C#中使用class关键字 ...

  5. UML类图中类之间的关系,聚合,组合,依赖总结

    下面我就根据下面这个图来讲解一下UML类图. 类图 首先,看动物那个矩形框,他就表示为一个类(Class).类图分为三层: 第一层显示类的名称 如果是抽象类,就用斜体表示 第二层显示类的特性,通常是字 ...

  6. 详解JavaScript中ES5和ES6的类、继承之间区别和联系

    导读: 很多JavaScript的初学者(比如说我)在刚开始学习这门语言的时候,往往会对函数.对象.类.继承这些概念感到迷茫和疑惑,感觉他们彼此之间长得十分相似,这就导致很难分清他们什么时候该怎么用. ...

  7. python:类的空间问题 类与类之间的关系

    1.类的空间问题 1.1何处可以添加对象属性 class A:def __init__(self,name):self.name = namedef func(self,sex):self.sex = ...

  8. 浅谈UML类图中类之间的5种关系

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  9. 类型转换,类与类之间的转换,继承关系,继承与静态变量,子类父类重名,多继承,虚基类

     常量的基本类型转换,例如:int num(10.8),这种方式是隐式转换. 通过函数的构造函数实现转换. 类类转换函数,当构造函数不能将类型转换成基本类型时.所以就有了类类转换函数,通过这种方式 ...

最新文章

  1. GAN:「太难的部分我就不生成了,在下告退」
  2. RabbitMq简单应用
  3. 知乎高赞:985计算机视觉毕业后找不到工作怎么办?怒刷leetcode,还是另寻他路?
  4. 关于Cocos2d-x中让主角运动的方法
  5. 消息队列—主要消息中间件优势对比
  6. LeetCode 1007. 行相等的最少多米诺旋转
  7. Python并发编程:多进程-守护进程
  8. android 点击热区,增大UIButton的点击热区
  9. python生成shell脚本_Python设置在shell脚本中自动补全功能的方法
  10. Android系统Audio框架介绍(一)
  11. Dockerfile 数据卷最佳实践
  12. 匿名内部类为什么访问外部类局部变量必须是final的?
  13. 2106_视频处理与压缩技术_中文综述
  14. 组织人事类主数据业务梳理以及流程编排
  15. TCP 协议面试灵魂 12 问(二)
  16. 乘法口诀测试小软件,60000道乘法口诀练习题模板(4至9以内各10000题)
  17. QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型
  18. 清除浮动的几种常用方法
  19. 经济学原理全部重点笔记(内部范围)
  20. 前嗅教你大数据:采集孔夫子旧书网

热门文章

  1. Metasploit Shell升级Meterpreter会话技巧
  2. XamarinSQLite教程创建数据表
  3. iOS 9音频应用播放音频之iOS 9音频播放进度
  4. go where 不等于_go基础之map迭代(四)
  5. linux怎么修改grub引导顺序,我如何更改GRUB引导顺序?
  6. Review Python Numpy 数组的初始化和基本操作
  7. java object monitor_Java-线程状态、ObjectMonitor
  8. 脑机接口成唯一沟通方式,渐冻症晚期父亲终向4岁儿子表达爱意
  9. Windows 11正式版将于10月5日推出,说好的支持安卓App没上车
  10. Jupyter Notebook已出现“返祖现象”,这款工具让你在终端里使用它