1数据结构2设计模式2.1四原则2.1.1单一职责2.1.2开放-封闭2.1.3里氏替换2.1.4依赖倒转2.1.5迪米特2.2简单工厂通过工厂类,依照条件把子类造出来2.3策略2.4装饰将需要修饰的类的对象引入,2.5代理2.6工厂对比简单工厂来说,将其自身也子类化将类的实例化延迟到其子类2.7原型2.8单例3C#概念3.1装箱拆箱3.1.1值类型与引用类型值类型:System.ValueType(继承自System.Object)引用类型:System.Object3.1.2System.Object方法clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyall3.1.3强类型RTTI3.2反射3.2.1反射反射提供一种编程方式,让程序员可以在程序运行期获得程序集、模块、类型的相关信息。Gettheinformationofassembly,module,andclassatruntime3.2.2晚绑定3.2.3创建动态3.3特性PropertyisaconceptofOOP.Ituses‘get’and‘set’toaccessthemembervariables.Attributeisakindofmetadataof.NETfile.Itisusedtodescribeyourcodeatruntime.3.4序列化Storageanobjectinakindofmedium,ortransferthisobject,inordertotransmititonthenet.Thebaseclasscanbeserialized.Ituseserializableattribute3.4.1二进制binary3.4.2XML3.4.3SoapSimpleObjectAccessProtocol3.5GC–GarbageCollection3.5.1Disposeexplicit3.5.2FinalizeImplicit,youdon’tknowwhenthegarbageiscollect3.6GAC3.6.1托管代码ManagedCode3.6.2GAC全局程序缓存GlobalAssemblyCache3.6.3CLR公共语言运行库(commonlanguageruntime)托管代码执行核心中的引擎。运行库为托管代码提供各种服务,如跨语言集成、代码访问安全性、对象生存期管理、调试和分析支持。公共语言运行库能够验证代码是否为类型安全的代码3.6.4IL代码IntermediateLanguage平台无关,交互操作3.6.5CTS公共类型系统(CommonTypeSystem)Anylanguagebasedon.NETmustestablishtheconnectionbetweenitsdatatypeandCTStype.3.6.6应用程序域(ApplicationDomain)程序集(Assembly)加载到应用程序域(ApplicationDomain)AvoidwindowdllHell3.6.7装配件/程序集(Assembly)3.6.8命名空间(Namespace)3.6.9强命名一个强命名程序集包含四个唯一标志程序集的特性:文件名(没有扩展名),版本号(Version),语言文化信息(Culture),公有秘钥(PublicKeyToken)。存在清单(manifest)中。解决WindowsDLLHell问题强命名有一个发布者的公钥/私钥对签名3.6.10PE文件PE表头、CLR表头、元数据、IL代码3.6.11元数据元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件(PE)文件或存储在内存中的程序进行描述。3.7面向对象3.7.1封装Dataabstraction,3.7.2继承inheritance,3.7.3多态polymorphism我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,因为编译器(compiler)会自动就找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamicbinding)。“一个接口,多种方法”,在程序运行过程中才决定调用的函数。3.7.4OverrideandoverloadOverrideisoverridethevirtualfunctionofbaseclassOverloadiswriteafunctionwhosenameisthesamewitholdone,buttheparametersaredifferent.Override与new3.7.5structure结构是值类型,结构只能继承接口不能被继承,结构没有析构函数3.7.6访问修饰符PrivateProtectedPublicInternal3.7.7virtual与abstractvirtual必须被实现,abstract必须不能实现abstract必须被子类重写3.8接口与抽象类3.8.1区别:构造方法、终结器、字段、静态成员、抽象方法、实例方法、多继承、访问级别、静态构造方法3.8.2两个接口,同一方法3.8.3抽象类实现多个版本;通用的已实现的功能;大的功能单元;关系密切的对象3.9const与readonly3.9.1constisanalyzedinthecompiledurationmustbeinitializedwhenitisdeclaredcanmarkmemberofclass,andalsomarklocalvariablesoffunction3.9.2staticreadonlyisanalyzedatruntimecanbeinitializedintheconstructorcanonlymarkmemberofclass3.10委托与事件3.10.1委托委托可以当成是对函数的引用(指针)3.10.2事件4C#编码4.1特性4.1.1[DllImport()]4.1.2[Seriazability]4.1.3[Conditional()]4.2索引器this可以用任意类型4.3官方接口4.3.1IDisposable4.3.2IClonable4.3.3IEnumarable4.3.4IComparable4.3.5IEquatable5C++知识5.1面向对象5.1.1空类:默认构造函数、析构函数、拷贝构造函数和赋值函数(assignmentoperator)5.1.2structure默认public5.1.3constructor与destructor5.1.45.2指针与引用非空区别null合法性区别ifvalidorinvalid,verifythevalidity可修改区别canbemodified应用区别void(*f)()void*f()constint*int*constint*a[10]int(*a)[10]int(*a[10])(int)5.3char*与char[]全局与局部5.4关于main函数隐式返回05.5内存分配Malloc/free库函数new/delete运算符5.6const定义敞亮修饰函数参数修饰函数返回值修饰函数本体与#define区别,有数据类型,编译器可以进行类型安全监察5.7sizeof运算符数组不退化5.8内联函数与宏相比,做参数类型检查5.9STL、ACE、6技术6.1单元测试6.1.1Gtest6.1.2NUnit6.1.3DotUnit6.1.4VS自带6.2WPF6.2.1Style6.2.2TriggersStyle.triggersPropertytrigger,datatrigger,eventtrigger.6.2.3Binding元素Converter:turnthedatavalueintoanotherformElementNameFallbackValueModePathRelativeSourceSourceStringFormatUpdateSourceTriggerValidationRulesDataContext6.2.4Command6.2.5AttachBehavior6.2.6MVVMCommandandbindingareincludedinviewmodel6.3WCFWCF的基本概念是以合约(Contract)来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。6.3.1ContractbindingHTTP\TCP\NamedPipe6.3.2SOA(service-orientedarchitecture)6.3.3ServiceReference6.3.4WebServiceSOAP,WSDL,互操作性(interoperability)调用方法:WSDL.exe,Addwebreference6.3.56.4ADO.NET6.4.1SqlDataAdapter6.4.2DataSet6.4.3LINQ6.4.4EntityFramework6.5ASP.NET6.5.1页面传值(1)通过URL链接传递,QueryString(页面间)Request.Redirect()Request.QueryString[]不能传递对象,安全性不高(2)通过POST方式传递formaction=”receive.aspx”,method=postRequest.Form[“”](3)通过Session(页面间)Session[“”];存储在服务器内存中,不能跨进程访问用户专有信息生存期是用户持续请求时间加上一段时间(默认20分钟)设置时间session.SetMaxInactiveInterval(900)或者webconfigsessionState会消耗过多的服务器资源(4)通过Application(页面间)Application[“”](5)通过Server.Transfer(页面间)Server.Transfer(6)通过@PreviousPageType指令(页面间)(7)通过Cookie(页面间)客户端浏览器请求服务器页面的请求信息默认生命周期到关闭浏览器为止,可设置Expires属性存储大小一般为4K(4096字节)(8)通过Cache(页面间)在http请求期间保存页面应用程序穿有,其生命周期=应用程序周期(9)通过ViewState生命周期=页面的生命周期在页面postback期间保存状态(10)通过HiddenHtml服务器控件,要使用runat=server每一次提交和6.5.2runat=”server”标签转换成HtmlControl或者对应的子类,加载到页面的控件集合中,按照控件的生命周期处理若没有则所有字符当成文本输出,直接写入response服务器端控件6.5.3页面加载顺序(1)初始化(2)构造函数(3)AddParsedSubObject添加所有独立的控件(4)DeterminePostBackMode(5)OnInit定义的值应用到控件(6)LoadPageStateFromPersistenceMedium页面回传执行(7)LoadViewState恢复viewstate(8)ProcessPostData回传执行(9)OnLoad(10)ProcessPostData(11)RaiseChangedEvents(12)RaisePostBackEvent(13)OnPreRender展现界面之前,可创建动态控件(14)SaveViewState(15)SavePageStateToPersistenceMedium保存viewstate(16)Render发送控件给浏览器(17)OnUnload调用dispose(18)6.5.4身份验证(1)Windows验证WindowsAuthenticationModul