唯一约束:为了设置唯一,保证数据唯一使用语法:altertable表名addconstraintUQ_表名_字段名unique(字段);唯一约束与主键约束的唯一区别:主键定位了表,一张表中只允许有一个主键,但是可以有多个唯一约束。主键不允许为空,但是位于唯一约束可以为空。(空也只能都有一个)重名的时候可以加上中括号括起来,在表格中不能有两个null。 通过SSMS添加唯一约束: 设计表->右键唯一键->添加->右边更改名字->设定字段默认约束(defalut)有些时候需要有默认值两个情形:用户的插入数据的时间。另外一个情形:软删除。即使有日志,也不可能恢复日志alter Read More
我们可以将连接池想象为一个中间存储空间。当我们连接数据库的时候,首先需要访问这个存储空间,在存储空间中寻找与连接字符串匹配的连接对象,如果连接池中存在这个对象,便可直接拿来使用,如果没有,就会自动创建一个新的连接对象。 连接池几部完全存在于SQL Server中,也不完全存在于Framework中。 连接池尽早关闭,尽晚打开。 Read More
继承:是类与类之间的关系:如何判断一个继承关系是否合理?子类isa父类父类相对于来说更抽象的,子类相对来说是比较具体的。BaseClass基类ParentClass父类DerivedClass派生类ChildClass子类继承更重要的作用,是为了多态:继承的好处:防止代码重用,多态继承的单根性,一个子类只能有一个父类继承的传递性:父类默认为继承的是Object继承中的构造函数:当两个类具有继承关系的时候,在对象实例化先调用父类的构造函数,默认为父类中无参的构造函数。注意:在实例化子类对象时,会调用子类构造函数,但是在调用子类构造函数前,会先调用父类的构造函数,默认情况下会调用父类中无参数的构造 Read More
访问修饰符:publicprotectedprivateinternalprotectedinternal按照访问权限进行排序:Private,internal,internalprotected, protected,public类中的成员,无论是方法还是字段,默认访问修饰符为InternalPrivate:只限于当前类内部可以访问Protected:当前类内部以及所有的子类内部Internal:表示当前程序集内部:Public:公有访问,不受限制Protectedinternal:内部保护访问。只限于本项目或是子类访问,其他不能访问 Read More
静态成员的特点: 1.在一个成员前面有static关键字,那么这个成员就是静态成员。2. 静态成员只能通过类名.来访问,不能通过对象来访问。 3.静态成员在任何地方都是共享的,一个地方改变后,所有的地方都发生了变化。 4.静态方法和静态变量创建后始终使用同一块内存,在静态方法中不可以直接调用实例方法。 5.静态成员只有程序退出时才会被释放。 5.在静态成员中,不能使用this。 6.静态类中只能包括静态成员。 7.在实例方法中可以直接调用静态方法,在静态方法中不可以直接调用实例方法。 8.静态类中只包括静态成员。9.静态构造函数在第一次使用该静态类的时候只执行一次。 Read More
1>文件压缩过程: 1.创建读取流File.OpenRead() 2.创建写入流File.OpenWrite(); 3.创建压缩流new GZipStream();将写入流作为参数与。 4.每次通过读取流读取一部分数据,通过压缩流写入。2>文件解压过程 1.创建读取流:File.OpenRead() 2.创建压缩流:new GZipStream();将读取流作为参数 3.创建写入流File.OpenWrite(); 4.每次通过压缩流读取数据,通过写入流写入数据。文件压缩举例说明: //1.创建读取文本文件的流 using (FileStream fsRead = File.Ope Read More
委托和事件 事件是通过委托联系起来的,委托才是事件的核心内容,如果没有委托,事件就什么都不是了。 例如在三连击事件中: 三连击事件被触发,要执行的代码,这里的代码不能“写死”,要有将来使用该控件的用户来定义三连击之后要执行什么样的代码也就是说这里需要执行一段代码,而这个方法具有现在不确定,由将来的按钮使用者来决定,场景非常类似于委托的使用。 1 private void Form1_Load(object sender, EventArgs e) 2 3 { 4 5 ... Read More
如果一个类型的对象,想要在foreach中可以遍历,该类型必须有一个方法:IEumerator GetEnumerator(),一般做法是让该类型实现IEnumeralbe接口,则该类型中必然就有GetEnumerator()方法了。GetEnumerator()的返回值是IEnumerator类型。然后写一个类型,该类型实现了IEnumerator接口的类,在GetEnumerator()方法中返回这个类型的对象。其中,实现IEnumerable接口的类型即为可枚举类型,实现IEnumerator接口的类型为枚举器。yield关键字便实现了对对象的遍历。 例如: namespace _for Read More
委托是一种数据类型。只有委托这种数据类型才能保存方法变量。既然是数据类型,就可以通过该数据类型声明变量。不同类型的方法(参数不同,返回值不同),需要使用不同的委托类型来存储,所以不同类型的方法需要自定义不同类型的委托,就像需要定义不同的类来存储不同对象一样。委托是不存在重载的同一个方法则可以使用同一个“委托类型”来存储。一般委托也直接写在命名空间下,与类是同一个级别的东西。定义委托的时候,需要制定该委托类型将来要存储的方法的返回值与参数列表。制定后,该委托类型就只能存储需要我们弄清楚的是:委托变量并不是方法,所以不能直接调用。要想调用委托中保存的方法,需要通过委托变量Invoke来调用委托的意 Read More
FileDirectorySystem.io输入和输出流DirectoryInfo用来模拟一个文件夹对象FileInfo用来模拟一个文件对象Path也是一个静态类获取关于路径的一些列操作都用path类文件流,抽象类:FileStream//文件流,MemoyStream(内存流),NetworkStream(网络流)StreamWriter//快速写入文本文件StreamReader//快速读出文本文件GzipStream//压缩Path类:对字符串进行操作:Stringpath=@"c\xxx.txt";Path=path.ChangeExtension(path,&qu Read More
贪婪模式:当出现限定符+、?、*、{n,}类似这样的限定符时,正则表达式会默认会可能多的进 行匹配,这种方式叫做“贪婪模式”在限定符后加?就表示“终止贪婪模式”终止贪婪模式意味着尽可能少的匹配。环视也是断言(只判断,不匹配)的一种,环视本身不予匹配。环视有四种:写法是:(?=)肯定正向环视 (?<=)肯定逆向环视(?<!)否定逆向环视在正向环视的时候()不参与分组。正则表达式是来操作字符串的,会用但是不要滥用。例如: 将张三:18999141265李四:13111111111王五:13488888888电信:10000移动:10086联通:10010工行:95588传智播客010- Read More
正则表达式是对字符串进行操作的。正则表达式元字符:.表示除\n(换行)之外的任意的当字符[]字符组。任意的单个字符,中括号中的任意一个字符()的含义:改变优先级。提取分组如果中括号中加—没有办法区分,。最好前面加上一个反义字符限定符:{n}表示前面的表达式必须出现n次{n ,}表示前面的表达式最后最少出现n次,最多不限{n,m}至少出现n次,最多出现m次*表示出现0次或多次+表示出现1次或多次?表示0次或1次。?的另外一个意思是:终止贪婪模式。 ^与$^表示一个字符串的开始。字符串必须以hiello开头$表示字符串的结束A$字符串的结束。必须以A结束A[^0-9]b指的是a到b之间除了0到9的 Read More
常用集合:类似数组集合ArrayList,List<T>键值对集合(哈希表集合):Hashtable,Dictionary<K,V>堆栈集合:Stack\Stack<T>(LIFO)队列集合:Queue,Queue<T>(FIFO)可排序键值对集合:(插入,检索没有哈希表集合高效)SortedList,SortedList<K,V>(占用内存更少,可以通过索引访问)SortedDictionary<K,V>(占用内存更多,没有索引,但插入删除元素的速度比SortedList快)Set集合,无顺序,不重复。HashSet&l Read More
程序集包含:类型元数据(描述在代码中定义的每一类型和成员,二进制形式)。程集元数据(程序集清单、版本号、名称等)、IL代码(这些都被装在exe或dll中)、资源文件。每个程序集都有自己的名称、版本等信息,这些信息可以通过AssemblyInfo.cs文件来自己定义。 获取一个类的类型 person p=new person(); Type Type=p.getType(); 得到一个类的类型 Type type=typeof(Person); 获取一个类型的父类 Type type=s.GetType().BaseType; 获取Person类型的所有方法(不包括私有方法) Perso... Read More
MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 GC是垃圾收集器(GarbageCollection)。程序员不用担心内存管理,因为垃圾收集器会自动进行管理。GC只能处理托管内存资源的释放,对于非托管资源(例如:文件句柄,网络端口等)则不能使用GC进行回收,必须由程序员手工回收,一个例子就是FileStream或者SqlConnection需要程序员调用Dispose进行资源的回收。MicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 要请求垃圾收集,可以调用下 Read More
接口中只能包含方法:(属性,事件,索引器也都是方法)接口中的成员都不能有任何实现。接口不能被实例化接口中的成员不能有任何访问修饰符(默认为public)实现接口的子类必须将接口中的所有成员都实现子类实现接口的方法时,不需要任何关键字接口存在的意义就是为了多态接口解决了多继承的问题。(抽象类不同)当不同类型需要实现多态时,无法抽象出公共的父类,这时可以考虑使用接口,比如鸟和飞机都能飞,但是他们不能抽象出来一个类。 Read More
装箱就是将值类型用引用类型包装起来转换为引用类型;而从引用类型中拿到被包装的值类型数据进行拆箱。 装箱过程其实就是把值类型拷贝到堆中,拆箱可以在引用类型中直接找到值类型存在的位置。如果一段代码中有装箱和拆箱的操作,在Reflector反编译器中,查看中间代码生成的IL语言,会有box,unbox命令。 例如: N.Tostring()其实是在n中创建了一个对象 Int m=int.Psrse(s);这个不叫拆箱 Int n=10; Conosle.Wtitline(n); Object o=n;//一次装箱 console.WriteLine((int)o);//这是一次拆箱 Console. Read More
Var是什么呢?是一种类型推断,目的是为了方便程序员的使用,在c#中,Var仍然看做是一种强类型,因为在编译阶段就已经确定了它的数据类型,编译器会根据将要赋值的数据类型来确定var应该替换成哪种数据类型。但是Var不能作为方法的参数的类型,返回值以及类型的成员变量。 例如: Static void M1(var n) {} 这种写法是错误的。 static void Main(string[] args) { string[] names = { "aa","bb","cc"}; foreach (var name in names) Read More