首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10000篇文章
优秀的个人博客,低调大师

C#对象深度克隆

有基础的开发者都应该很明白,对象是一个引用类型,例如: object b=new object(); object a=b; 那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也会跟随着改变(a和b是同一个引用内存地址)。 我们想要a和b都是各自互不影响的,那么只能是完全地新建一个新的对象,并且把现有对象的每个属性的值赋给新的对象的属性。也就是值类型的复制,这个操作就叫深度克隆。 这里我们写两个泛型方法分别对对象T和集合List<T>进行深度克隆的实现,我们的方法实现方式是“扩展方法”,就是能在原有的对象后面直接“点”操作。 下面我们来看一下深度克隆的算法实现: usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Reflection;/** *author:qixiao *create:2017-5-2511:52:21 **/namespaceQX_Frame.Helper_DG.Extends {publicstaticclassCloneExtends {publicstaticTDeepCloneObject<T>(thisTt)whereT:class { Tmodel=System.Activator.CreateInstance<T>();//实例化一个T类型对象 PropertyInfo[]propertyInfos=model.GetType().GetProperties();//获取T对象的所有公共属性 foreach(PropertyInfopropertyInfoinpropertyInfos) {//判断值是否为空,如果空赋值为null见else if(propertyInfo.PropertyType.IsGenericType&&propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) {//如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换 NullableConverternullableConverter=newNullableConverter(propertyInfo.PropertyType);//将convertsionType转换为nullable对的基础基元类型 propertyInfo.SetValue(model,Convert.ChangeType(propertyInfo.GetValue(t),nullableConverter.UnderlyingType),null); }else { propertyInfo.SetValue(model,Convert.ChangeType(propertyInfo.GetValue(t),propertyInfo.PropertyType),null); } }returnmodel; }publicstaticIList<T>DeepCloneList<T>(thisIList<T>tList)whereT:class { IList<T>listNew=newList<T>();foreach(varitemintList) { Tmodel=System.Activator.CreateInstance<T>();//实例化一个T类型对象 PropertyInfo[]propertyInfos=model.GetType().GetProperties();//获取T对象的所有公共属性 foreach(PropertyInfopropertyInfoinpropertyInfos) {//判断值是否为空,如果空赋值为null见else if(propertyInfo.PropertyType.IsGenericType&&propertyInfo.PropertyType.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) {//如果convertsionType为nullable类,声明一个NullableConverter类,该类提供从Nullable类到基础基元类型的转换 NullableConverternullableConverter=newNullableConverter(propertyInfo.PropertyType);//将convertsionType转换为nullable对的基础基元类型 propertyInfo.SetValue(model,Convert.ChangeType(propertyInfo.GetValue(item),nullableConverter.UnderlyingType),null); }else { propertyInfo.SetValue(model,Convert.ChangeType(propertyInfo.GetValue(item),propertyInfo.PropertyType),null); } } listNew.Add(model); }returnlistNew; } } } 本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1949344,如需转载请自行联系原作者

优秀的个人博客,低调大师

Objective-C之分类

Animal.h #import <Foundation/Foundation.h> @interface Animal : NSObject -(void) eat : (NSString *)food; @end Animal.m #import "Animal.h" @implementation Animal /** 吃/ -(void) eat:(NSString)food{ NSLog(@"I like eat %@" , food); } @end 在main入口中的测试 #import <Foundation/Foundation.h> #import "Animal.h" int main(int argc, const charargv[]) { @autoreleasepool { Animaldog = [[Animal alloc] init]; NSString *food = @"Bone"; [dog eat:food]; } return 0; } 结果 : 一 , 命名分类 AnimalPart h: #import <Foundation/Foundation.h> #import "Animal.h" @interface Animal (AnimalPart) -(void) call : ( NSString * ) sound;br/>@end m: #import "AnimalPart.h" @implementation Animal (AnimalPart) -(void) call:(NSString *)sound{ NSLog(@"I Call Sound : %@" , sound); } @end 测试: #import <Foundation/Foundation.h> #import "Animal.h" #import "AnimalPart.h" int main(int argc, const charargv[]) { @autoreleasepool { Animaldog = [[Animal alloc] init]; NSStringfood = @"Bone"; [dog eat:food]; //命名分类扩展的方法 NSStringsound = @"wang wang wang ......"; [dog call:sound]; } return 0; } 结果: 解释: 创建AnimalPart的h和m文件。但是AnimalPart作为Animal的扩展分类,只能写在()当中 。 实现在AnimalPart的M中间中实现代码(未命名分类在Animal的M中实现) 不能够扩展属性(未命名分类可以) 二 , 未命名分类 AnimalPartUnName 因为未命名分类不需要m文件所以只建立h文件 h文件 #import <Foundation/Foundation.h> #import "Animal.h" @interface Animal () @property NSString *name; -(void) Writename; @end 在Animal的m文件中实现 main文件 结果 本文转自Aonaufly51CTO博客,原文链接:http://blog.51cto.com/aonaufly/2044467,如需转载请自行联系原作者

优秀的个人博客,低调大师

实施网络安全-C

1、开放系统互联(OSI)模型是一种根据网络与网络中其他元素进行通讯的方式抽象出网络结构的方式,OSI模型的主要目的是促进不同类型的网络产品和服务之间的无缝持续通讯。 2、OSI模型有7个层次: 第一层,物理层,定义了设备与物理传输媒介之间的连接,物理连接组件如电缆和电线以及基本网络设备,如集线器、中继器、交换机、适配器等的规范说明! 第二层,数据链路层,提供了两个之间连接的节点之间的链路,检测并修复物理层中的错误,点对点协议(PPP),提供节点之间的加密、认证和压缩的连接协议,G.hn! 第三层,网络层,使用唯一的地址,将数据从一个节点传输到多节点系统中的另一个节点中的协议,互联网协议(IP)、互联网控制消息协议(ICMP)、路由信息协议(RIP)! 第四层,传输层,为了更高的层次,控制网络节点之间的数据传输的可靠性,传输控制协议(TCP)、用户数据报协议(UDP)、流控制传输协议(SCTP)! 第五层,会话层,通过检查节点控制计算机之间的连接,使得被终止的连接可以恢复,网络文件系统(NFS)、套接字安全(socks)! 第六层,表示层,将数据转换为一种应用层上层的程序可以理解的格式,独立计算架构(ICA)! 第七层,应用层,通过确定资源和通讯要求,允许用户与软件之间进行交互,超文本传输协议(HTTP)、文件传输协议(FTP)、域名系统(DNS)! 本文转自 eth10 51CTO博客,原文链接:http://blog.51cto.com/eth10/1983424

优秀的个人博客,低调大师

Storm入门之附录C

本文翻译自《Getting Started With Storm》译者:吴京润 编辑:郭蕾 方腾飞 安装实际的例子 译者注:有些软件的最新版本已有变化,译文不会完全按照原文翻译,而是列出当前最新版本的软件。 首先,从下述GitHub的URL克隆这个例子: > git clone git://github.com/storm-book/examples-ch06-real-life-app.git src/main 包含拓扑的源码 src/test 包含拓扑的测试用例 webapps目录 包含Node.js Web可以执行拓扑应用 . ├── pom.xml ├── src │ ├── main │ │ └── java │ └── test │ └── groovy └── webapp 安装Redis Redis的安装是相当简单的: 从Redis站点下载最新的稳定版(译者注:翻译本章时最新版本是2.8.9。) 解压缩 运行make,和make install。 上述命令会编译Redis并在PATH目录(译者注:/usr/local/bin)创建可执行文件。 可以从Redis网站上获取更多信息,包括相关命令文档及设计理念。 安装Node.js 安装Node.js也很简单。从http://www.nodejs.org/#download下载最新版本的Node.js源码。 当前最新版本是v0.10.28 下载完成,解压缩,执行 <b>./configure</b> <b>make</b> <b>make install</b> 可以从官方站点得到更多信息,包括在不同平台上安装Node.js的方法。 构建与测试 为了构建这个例子,需要先启动redis-server >nohup redis-server & 然后执行mvn命令编译并测试这个应用。 >mvn package … [INFO] ———————————————————————— [INFO] BUILD SUCCESS [INFO] ———————————————————————— [INFO] Total time: 32.163s [INFO] Finished at: Sun Jun 17 18:55:10 GMT-03:00 2012 [INFO] Final Memory: 9M/81M [INFO] 运行拓扑 启动了redis-service并成功构建之后,在LocalCluster启动拓扑。 >java -jar target/storm-analytics-0.0.1-jar-with-dependencies.jar 启动拓扑之后,用以下命令启动Node.js Web应用: >node webapp/app.js NOTE:拓扑和Node.js命令会互相阻塞。尝试在不同的终端运行它们。 演示这个例子 在浏览器输入http://localhost:3000/开始演示这个例子! 关于作者 Jonathan Leibiusky,MercadoLibre的主要研究与开发人员,已在软件开发领域工作逾10年之久。他已为诸多开源项目贡献过源码,包括“Jedis”,它在VMware和SpringSource得到广泛使用。 Gabriel Eisbruch一位计算机科学学生,从2007年开始在Mercadolibre(NASDAQ MELI)任架构师。主要负责研究与开发软件项目。去年,他专门负责大数据分析,为MercadoLibre实现了Hadoop集群。 Dario Simonassi在软件开发领域有10年以上工作经验。从2004年开,他专门负责大型站点的操作与性能。现在他是MercadoLibre(NASDAQ MELI)的首席架构师,领导着该公司的架构师团队。 文章转自并发编程网-ifeve.com

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册