有基础的开发者都应该很明白,对象是一个引用类型,例如:object b=new object();object a=b;那么a指向的是b的地址,这样在有些时候就会造成如果修改a的值,那么b的值也会跟随着改变(a和b是同一个引用内存地址)。我们想要a和b都是各自互不影响的,那么只能是完全地新建一个新的对象,并且把现有对象的每个属性的值赋给新的对象的属性。也就是值类型的复制,这个操作就叫深度克隆。这里我们写两个泛型方法分别对对象T和集合List<T>...
1.面向对象的3要素:封装:将不需要显示的代码封装到一个方法中,只对外提供方法名,用户不需关心内部实现。继承:子类继承父类,公用父类的代码,大大提高了代码的重用,贴近生活也符合人类的编程思想。多态:使一样的方法具有不同的实现效果,大大简化了开发的难度。实现接口和继承父类都能实现多态。其他术语:接口[interface]:接口提供一套规则继承接口的子类都必须实现其中的方法,也是实现多态的一个途径。结构[struct]:结构...
动机(Motivation)在软件系统中经常面临着“一系列相互依赖的对象”的创建工作,同时,由于需求变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规对象的创建,提供一种“封装机制”来避免客户程序和这种“多系列具体对象的创建工作”的紧耦合?意图(Intent)提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 ---《设计模式》 GoF结构 (Structure) 原文:...
1、创建一个图形对象的步骤如下见上一篇博客(三)2、添加删除实体的工具函数见上一篇博客(四)3、添加圆的例子(完整源代码请加云幽学院免费课yunyun.ke.qq.com) [CommandMethod("MKCircle")] public void MKCircle() { //(1)获取当前活动图形数据库 Database db = HostApplicationServices.WorkingDatabase; //(2)新建一个circle对象 Point3d cenPt = new Poi...
.Net 视频学习第2季 C#面向对象 面向对象 里氏转换 随机数 protected里氏转换:子类对象可以赋值给父类对象;如果父类中装的是子类对象,可以将此父类对象强制转换成子类对象。子类对象可以调用父类成员,但父类对象永远只能调用自己的成员。is或者as均表示类型转换,is返回true/false,as返回转换后对象/nullclass Person {publicstring Name {get;set;} }class Student:Person { }class Teacher:Person { }Person p = new Studen...
1using System;2using System.Collections.Generic;3using System.Text;4using System.Xml.Serialization;5using System.IO;6using System.Xml;7 8namespace Common9{ 10publicclass XmlUtility 11 { 12///<summary>13/// 将自定义对象序列化为XML字符串 14///</summary>15///<param name="myObject">自定义对象实体</param>16///<returns>序列化后的XML字符串</returns>17publicstaticstring SerializeToXml<T>(T myObject) 18...
用到的知识很简单:产生随机数、保存数据到文本文件、定时器的使用等。主要体现c#面向对象设计的思想。界面效果如下: 1using System;2using System.Collections.Generic;3using System.Linq;4using System.Text;5using System.Threading.Tasks;6 7namespace 体育彩票选号器8{9///<summary>10/// 日历类 11///</summary>12class Calendar 13 { 14publicstring Year { get; set; } 15publicstring Month { get; set; } 16publics...
FileStream对象表示在磁盘或网络路径上指向文件的流。当类提供向文件读写字节的方法时,经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作字节和字节数组,而Stream类操作字符数据。字符数据易于使用,但是有些操作比如随机文件访问,就必须由FileStream对象执行。FileStream对象的构造函数:FileStream aFile = new FileStream(“Log.txt”,FileMode.OpenOrCreate); FileMode枚举具有几种成员:Append---...
1、静态构造函数 在引入本文的主题之前,我们先来铺垫一下吧,看看静态构造函数的概念及用途。 C#中允许创建无参数构造函数,该函数仅执行一次。它一般被用来初始化静态字段。CLR不能保证在某个特定时刻执行静态构造函数,同时也不保证不同类的静态构造函数按照什么顺序执行,但保证它仅执行一次,即在应用程序创建该类的第一个实例或访问该类的任何静态成员之前。 注意,静态构造函数不允许有访问修饰符,且不接受任...
在年前上班的时候遇到了一个问题是这样描述的:我前台设计一个页面,是标签和文本框,当用户修改了哪个文本框的值,将该修改前的值、修改后的值,该值对应的字段,该值对应的行id获取到保存到数据库的某张表里。现在数据库有一张表,结构如下:修改记录表ID 修改行ID修改列名称修改前的值修改后的值所属修改批次修改时间1 1test10112013-10-11 第一批次2013-10-11思路:1、将数据封装成实体对象传到后台。整套下来是用MVC的机...
转载自:http://www.cnblogs.com/alana/archive/2012/07/05/2577893.htmlC#的对象内存模型:一、栈内存和堆内存1、栈内存 由编译器自动分配和释放,主要用来保存一些局部变量、函数的参数等,例如,int a = 10 ,那么编译器会自动在栈上开辟一块内容用来存储变量a。2、堆内存 由程序员手动申请和释放,在C++中,通过new关键字申请,编译器不会释放,必须通过delete释放,对于C#,通过new 关键字申请,因为编译器的垃圾回收机...
1. 前端Json数组定义 var jsonArr=new Array();var json1={"Name":"zhangsan","Age":15,"Sex":"male"};var json2={"Name":"lisi","Age":10,"Sex":"female"};jsonArr.push(json1);jsonArr.push(json2);2. 后端:C# 定义与传入的Json对象类似的类,用来接收Json对象 这里要注意:传入的Json必须和后台自定义的类的属性值一样。 publicclass People{publicstring Name;publicint Age;publicstring Sex;} 3. 采用AjaxPro方法传入后...
第一讲:1. 面向对象设计模式与原则设计模式简介: 每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。 ——Christopher Alexander{建筑师}软件设计师对设计模式的概念的理解:(1)设计模式描述了软件设计过程中某一类常见问题的一般性的解决方案。(2)面向对象设计模式描述了面向对象设计过程中、特定场景下、类与相互通信的对象之...
C# Object Clone WarsCloning C# objects is one of those things that appears easy but is actually quite complicated with many "gotchas." This article describes the most common ways to clone a C# object. Shallow vs. Deep CloningThere are two types of object cloning: shallow and deep. A shallow clone copies the references but not the referenced objects. A deep clone copies the referenced objects as we...
第三章 对象和类型本章的内容: 类和结构的区别 类成员 按值和按引用传送参数 方法重载 构造函数和静态构造函数 只读字段 部分类 静态类 Object类,其他类型都从该类派生而来3.1 类和结构 类和结构都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法 结构和类的区别是他们在内存中的存储方式、访问方式(类是存储在堆...