C#笔记——基础篇

一.入门知识

VS中的常用快捷键

  • Ctrl+K+D:快速对齐代码
  • Ctrl+Z:撤销
  • Ctrl+S:保存(一定要经常保存!)
  • Ctrl+J:快速弹出智能提示
  • Shift+End 、Shift+Home
  • Ctrl+K+C:注释所选代码
  • Ctrl+K+U:取消对所选代码的注释
  • F1:转到帮助文档
  • 折叠冗余代码:#Region 和#EndRegion
  • 新建空的  tab键 新增子节点   回车键 新增兄弟节点
  • F7快捷截图 F8预览
  • .net/dotnet:一般指.Net Framework框架.一种平台,一种技术.
  • C#(sharp):一种编程语言,可以开发基于.net平台的应用.
  • (*) Java即是一种平台又是一种编程语言

xmind 绘图软件

1、概念:.net与c#

.Net FrameWork框架提供了一个稳定的运行环境,;来保障我们.Net平台正常的运转

2、.net都能干什么(S)

  • 桌面应用程序          Winform(.net开发的桌面应用程序叫Winform应用程序)
  • Internet应用程序  ASP.NET

(.net开发的internet应用程序叫ASP.NET应用程序)

  • 手机开发              wp8

(.net可以做手机开发,Wp8,目前在中国刚刚起步,也许 这是一个机会)

Wp8已经来袭,要善于抓住机会,敢于尝试.----掌握分寸

  • Unity3D游戏开发或者虚拟现实(大家的机遇)
  • C/S:客户机(Client)/服务器模式(Server)  如:qq

3、.NET两种交互模式(s)

(C/S是Client/Server的缩写。客户端需要安装专用的客户端软件。  Winform)

  • B/S:浏览器(Browser)/服务器模式(Server)

(B/S是Brower/Server的缩写,客户机上只要安装一个浏览器Internet应用程ASP.NET

)

4、IDE

IDE指的就是我们的开发工具。

(.net的IDE就是vs2010、vs2012、vs2013

注:MSDN(我们的百科全书,帮助)神器

5、vs的操作

1

1)、启动VS

a、双击图标

b、调出cmd,输入 devenu

2)、解决方案、项目及类之间的关系

解决方案:公司

项目:部门

类:员工

在视图里面找解决方案资源管理器

3)、Program中的各个组成部分

引用命名空间:

京东----》京东在线商城项目---》顾客类

淘宝----》淘宝在线商城项目---》顾客类

高端霸气公司----》老赵牛X项目---》顾客类

4)、方法或者函数

Main函数是我们程序的主入口,你写的代码如果想要被执行的话,必须写在Main函数当中。

5)、

.sln:解决方案文件,里面包含着整个解决方案的信息,可以双击运行。

.csproj:项目文件,里面包含着这个项目的信息,可以双击运行。

2、书写代码需要注意的地方:

1)、代码中出现的所有标点都是英文半角 shift键快速切换中文半角和英文半角

shift+空格 切换全角/半角

2)、在c#代码中,每行代码的结束,我们都以分号结束,注意:这个分号也是英文半角的分号。

3)、Console.WriteLine("要打印的内容");

Console.ReadKey();

a、暂停当前程序,等待用户按下任意键继续,按下的任意键将显示在我们的控制台当中

3、运行程序的两种方式

1)、点击绿色的启动按钮

2)、使用快捷键F5

4、生成解决方案

帮助我们排查语法错误。

5

1)、如果你的代码中出现了红色的波浪线,意味着你的代码中出现了

语法错误。

2)、如果你的代码中出现了绿色的波浪线,说明你的代码语法并没有错误,

只不过提示你有可能会出现错误,但是不一定会出现错误。警告线

二.基础知识

1、c#中的注释符

1)、注销

2)、解释

3)、三种注释方式

  • 第一种:单行注释  以//开头,后面的就是注释内容

–  //单行注释

  • 第二种:多行注释  以 /*开头   */结束 之间的是注释内容

–  /*  */多行注释

  • 第三种:文档注释  在方法或类的上一行输入 ///就会产生

–  ///

–  ///文档注释

–  ///

2、变量

用来在计算机当中存储数据。如果你要是用变量的话,应该要先声明再赋值再使用。

存储整数100

数据类型:整数

在内存中开辟的空间应该是整数类型 int

存储变量的语法:

变量类型 变量名;

变量名=值;

"="号:在这并不表示等于的意思,而是赋值的意思,表示把等号右边的值赋值给等号左边的变量。

声明并且给变量赋值的简写形式:

变量类型 变量名=值;

3、数据类型

1)、整数类型:int  只能存储整数,不能存储小数。

2)、小数类型:double 既能存储整数,也能存储小数,小数点后面的位数 15~16位。

3)、金钱类型:decimal:用来村粗金钱,值后面需要加上一个m.

4)、字符串类型:string,用来存储多个文本,也可以存储空,字符串类型的值需要被 双引号引来,

这个双引号必须是英文半角状态下的双引号

5)、字符类型:char,用来存储单个字符,最多、最少只能有一个字符,不能存储空。

字符类型的值需要用 单引号因起来。英文半角状态下的单引号。

4、命名规则:

****首先要保证的就是这个变量的名字要有意义。

1 现阶段给变量起名字的时候都以字母开头

2 后面可以跟任意“字母”、数字、下划线.

注意:

1)你起的变量名不要与c#系统中的关键字重复.

2)在c#中,大小写是敏感的.  HTML

3)同一个变量名不允许重复定义(先这么认为,不严谨)

给变量起名字的时候要满足两个命名规范:

1、Camel 骆驼命名规范。要求变量名首单词的首字母要小写,其余每个单词的首字母要大写。

多用于给变量命名。

2、Pascal 命名规范:要求每个单词的首字母都要大写,其余字母小写。多用于给类或者方法命名。

HighSchoolStudent

highSchoolStudent

5、运算符

1)、算数运算符

+,-,*,/,%

2)、赋值运算符

=:表示赋值的意思,表示把等号右边的值,赋值给等号左边的变量。

由等号连接的表达式称之为赋值表达式。

注意:每个表达式我们都可以求解除一个定值,对于赋值表达式而言,等号左边的变量的值,

就是整个赋值表达式的值。

int number=10;

6、+号和占位符的作用

+

1)、连接:当+号两边有一边是字符串的时候,+号就起到连接的作用。

2)、相加:两边是数字的时候

 

占位符

使用方法:先挖个坑,再填个坑。

使用占位符需要注意的地方:

1)、你挖了几个坑,就应该填几个坑,如果你多填了,没效果。

如果你少填了,抛异常。

2)、输出顺序:按照挖坑的顺序输出。

7、异常

异常是指:语法上并没有任何错误,只不过在程序运行的期间,由于某些原因出现了问题,

使程序不能再正常的运行。

8、转义符

转义符指的就是一个'\'+一个特殊的字符,组成了一个具有特殊意义的字符。

\n:表示换行

\":表示一个英文半角的双引号

\t:表示一个tab键的空格

\b:表示一个退格键,放到字符串的两边没有效果。

\r\n:windows操作系统不认识\n,只认识\r\n

\\:表示一个\

@符号

1、取消\在字符串中的转义作用,使其单纯的表示为一个'\'

2、将字符串按照编辑的原格式输出

9、类型转换

1)隐式类型转换:

我们要求等号两遍参与运算的操作数的类型必须一致,如果不一致,满足下列条件会发生

自动类型转换,或者称之为隐式类型转换。

两种类型兼容

例如:int 和 double 兼容(都是数字类型)

目标类型大于源类型

例如:double > int   小的转大的

2)显示类型转换:

1、两种类型相兼容  int--double

2、大的转成小的  double----int

语法:

(待转换的类型)要转换的值;

总结:

自动类型转换:int---->double

显示类型转换:double--->int

控制小数点位数的:{0:0.00}:小数点后两位

3)Convert类型转换

1、类型如果相兼容的两个变量,可以使用自动类型转换或者强制类型转换,

但是,如果两个类型的变量不兼容,比如 string与int或者string 与double,

这个时候我们可以使用一个叫做Convert的转换工厂进行转换。

注意:使用Convert进行类型转换,也需要满足一个条件:

面儿上必须要过的去。

int number = Convert.ToInt32(Console.ReadLine());

4)int.parse    Convert的内部方法,比其效率高一点,不过还会抛异常

尝试着将一个字符串转换成int类型。

int number= int.Parse(Console.ReadLine());

5) int.TryParse是方法,需要有参数和返回值,如果失败,不会抛出异常

int num=0;

bool b=int.TryParse(“3”, out num)//如果可以转换成功,b=true,num=3;否则,b=false;num=0;

10、运算符

1、算数运算符

1.

++:分为前++和后++,不管是前++还是后++,最终的结果都是给这个变量加一。

区别表现表达式当中,如果是前++,则先给这个变量自身加一,然后带着这个加一后的值去参与运算。

如果是后++,则先拿原值参与运算,运算完成后,再讲这个变量自身加一。

--:同上。

2、

对于向加加或者减减这样只需要一个操作数就能完成的运算,我们称之为一元运算符。

+ - * / % 对于这些需要两个或以上才能完成运算的操作符,我们称之为二元运算符。

一元运算符的优先级要高于而元运算符。

如果在一个表达式当中,既有一元运算符,又有二元运算符,我们首先计算一元运算符。

int number=10;

int result=10 + ++number; 

2、关系运算符

>、  <、  >=、  <=、  ==、  !=

关系运算符是用来描述两个事物之间的关系

由关系运算符连接的表达式称之为关系表达式。

3、bool类型

在c#中我们用bool类型来描述对或者错。

bool类型的值只有两个 一个true  一个false

4、逻辑运算符

&& 逻辑与

||逻辑或

!逻辑非

又逻辑运算符连接的表达式叫做逻辑表达式

逻辑运算符两边放的一般都是关系表达式或者bool类型的值。

5>3 &&true

3>5||false

!表达式

逻辑表达式的结果同样也是bool类型

5、复合赋值运算符

int number=10;

+= :

number+=20;

number=number+20;

-=

number-=5;

number=number-5;

*=

number*=5;

number=number*5;

/=

%=

6.三元表达式

语法:

表达式1?表达式2:表达式3;

表达式1一般为一个关系表达式。

如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。

如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。

注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。

11.结构

1.

顺序结构:程序从Main函数进入,从上到下一行一行的执行,不会落下任何一行。

if语句:

语法:

if(判断条件)

{

要执行的代码;

}

判断条件:一般为关系表达式或者bool类型的值。

执行过程:程序运行到if处,首先判断if所带的小括号中的判断条件,

如果条件成立,也就是返回true,则执行if所带的大括号中的代码,

如果判断条件不成立,也就是返回一个false。则跳过if结构,继续向下执行。

if结构的特点:先判断,再执行,有可能一行代码都不执行

用于一种情况的判断。

2.

分支结构:  if-else

语法:

if(判断条件)

{

执行的代码;

}

else

{

执行的代码

}

执行过程:程序执行到if处,首先判断if所带的小括号中的判断条件是否成立,

如果成立,也就是返回一个true,则执行if所带的大括号中的代码,

执行完成后,跳出if-else结构。

如果if所带的小括号中的判断条件不成立,也就是返回一个false,

则跳过if语句,执行else所带的大括号中的语句,执行完成后,跳出if-else结构。

if-else特点:先判断,再执行,最少都要执行一条代码。

用于两种情况的判断

注意:else永远跟离它最近的那个if配对

3

选择结构:if else-if   switch-case

if else-if

作用:用来处理多条件的区间性的判断。

语法:

if(判断条件)

{

要执行的代码;

}

else if(判断条件)

{

要执行的代码;

}

else if(判断条件)

{

要执行的代码;

}

else if(判断条件)

{

要执行的代码;

}

........

else

{

要执行的代码;

}

执行过程;程序首先判断第一个if所带的小括号中的判断条件,如果条件成立,也就是返回一个true,

则执行该if所带的大括号中的代码,执行完成后,立即跳出if else-if结构。

如果第一个if所带的判断条件不成立,也就是返回一个false,则继续向下进行判断,依次的判断每一个if所带

的判断条件,如果成立,就执行该if所带的大括号中的代码,如果不成立,则继续向下判断,

如果每个if所带的判断条件都不成立,就看当前这个if else-if结构中是否存在else。

如果有else的话,则执行else中所带的代码,如果没有else,则整个 if-else if神马都不做。

else可以省略。

switch-case

用来处理多条件的定值的判断。

语法:

switch(变量或者表达式的值)

{

case 值1:要执行的代码;

break;

case 值2:要执行的代码;

break;

case 值3:要执行的代码;

break;

..........

default:要执行的代码;

break;

}

执行过程:程序执行到switch处,首先将括号中变量或者表达式的值计算出来,

然后拿着这个值依次跟每个case后面所带的值进行匹配,一旦匹配成功,则执行

该case所带的代码,执行完成后,遇到break。跳出switch-case结构。

如果,跟每个case所带的值都不匹配。就看当前这个switch-case结构中是否存在

default,如果有default,则执行default中的语句,如果没有default,则该switch-case结构

什么都不做。

4

循环结构:while  do-while   for

while循环:

while(循环条件)

{

循环体;

}

执行过程:程序运行到while处,首先判断while所带的小括号内的循环条件是否成立,

如果成立的话,也就是返回一个true,则执行循环体,执行完一遍循环体后,再次回到

循环条件进行判断,如果依然成立,则继续执行循环体,如果不成立,则跳出while循环。

在while循环当中,一般总会有那么一行代码,能够改变循环条件,使之终有一天不再成立,

如果没有那么一行代码能够改变循环条件,也就是循环条件永远都成立,我们称之这种循环

叫做死循环。

最简单的最常用的死循环:

while(true)

{

}

特点:先判断,再执行,有可能一遍循环都不执行。

do-while循环。

语法:

do

{

循环体;

}while(循环条件);

执行过程:程序首先会执行do中的循环体,执行完成后,去判断do-while循环的循环条件,

如果成立,则继续执行do中的循环体,如果不成立,则跳出do-while循环。

特点:先循环,再判断,最少执行一遍循环体。

for循环

语法:

for(表达式1;表达式2;表达式3)

{

循环体;

}

表达式1一般为声明循环变量,记录循环的次数(int i=0;)

表达式2一般为循环条件(i<10)

表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。

执行过程:程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,

然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,

则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,

如果成立则继续执行循环体,如果不成立,则跳出for循环。

12 break, Continue

break

1)、可以跳出switch-case结构。

2)、可以跳出当前循环。

break一般不单独的使用,而是跟着if判断一起使用,表示,当满足某些条件的时候,就不再循环了。

 

Continue

立即结束本次循环,判断循环条件,如果成立,则进入下一次循环,否则退出循环.

13、异常捕获

1.try-catch

.我们在程序中经常会出现各种各样的异常,你如果想要你的程序变得坚强一些。

在你的代码中应该经常性的使用try-catch来进行异常捕获。

哪行代码有可能出现异常,你就踹它一脚。

语法:

try

{

可能会出现异常的代码;

....

...

...

}

//try和catch之间不能有其他的代码

catch

{

出现异常后要执行的代码;

}

执行过程:如果try中的代码没有出现异常,那么catch中的代码不会执行。

如果try中的代码出现了异常,那怕这行出现异常的代码后面还有一百行都不会执行了,

而是直接跳到catch中执行代码

2、变量的作用域

变量的作用域就是你能够使用到这个变量的范围。

变量的作用域一般从声明它的那个括号开始到那个括号所对应的结束的括号结束。

在这个范围内,我们可以访问并使用变量。超出这个范围就访问不到了

14、程序调试

1)、写完一段程序后,想看一下这段程序的执行过程。

2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。

调试方法:

1)、F11逐语句调试(单步调试)

2)、F10逐过程调试

3)、断点调试

15、常量

声明的常量的语法:

const 变量类型 变量名=值;

什么时候会用到常量?

16、枚举

语法:

[public] enum 枚举名

{

值1,

值2,

值3,

........

}

public:访问修饰符。公开的公共的,哪都可以访问。

enum:关键字,声明枚举的关键字

枚举名:要符合Pascal命名规范

将枚举声明到命名空间的下面,类的外面,表示这个命名空间下,所有的类都可以使用这个枚举。

枚举就是一个变量类型 ,int--double  string  decimal.

只是枚举声明、赋值、使用的方式跟那些普通的变量类型不一样。

我们可以将一个枚举类型的变量跟int类型和string类型互相转换。

枚举类型默认是跟int类型相互兼容的,所以可以通过强制类型转换的语法互相转换。

当转换一个枚举中没有的值的时候,不会抛异常,而是直接将数字显示出来。

枚举同样也可以跟string类型互相转换,如果将枚举类型转换成string类型,则直接调用ToString().

如果将字符串转换成枚举类型则需要下面这样一行代码:

(要转换的枚举类型)Enum.Parse(typeof(要转换的枚举类型),"要转换的字符串");

如果转换的字符串是数字,则就算枚举中没有,也会不会抛异常。

如果转换的字符串是文本,如果枚举中没有,则会抛出异常。

所有的类型都能够转换成string类型,调用ToString()。

17、结构

可以帮助我们一次性声明多个不同类型的变量。

语法:

[public] struct 结构名

{

成员;//字段

}

变量在程序运行期间只能存储一个值,而字段可以存储多个值。

18、数组

一次性存储多个相同类型的变量。

语法:

数组类型[] 数组名=new 数组类型[数组长度];

***数组的长度一旦固定了,就不能再被改变了

19、冒泡排序

冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列。

int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 8 9

第一趟比较:8 7 6 5 4 3 2 1 0 9 交换了9次     i=0  j=nums.Length-1-i

第二趟比较:7 6 5 4 3 2 1 0 8 9 交换了8次     i=1  j=nums.Length-1-i

第三趟比较:6 5 4 3 2 1 0 7 8 9 交换了7次     i=2  j=nums.Length-1-i

第四趟比较:5 4 3 2 1 0 6 7 8 9 交换了6次     i=3  j=nums.Length-1-i

第五趟比较:4 3 2 1 0 5 6 7 8 9 交换了5次

第六趟比较:3 2 1 0 4 5 6 7 8 9 交换了4次

第七趟比较:2 1 0 3 4 5 6 7 8 9 交换了3次

第八趟比较:1 0 2 3 4 5 6 7 8 9 交换了2次

第九趟比较:0 1 2 3 4 5 6 7 8 9 交换了1次

for(int i=0;i<number.Length-1;i++)

{

for(int j=0;j<nums.Length-1-i;j++)

{

if(nums[j]>nums[j+1])

{

int temp=nums[j];

nums[j]=nums[j+1];

nums[j+1]=temp;

}

}

}

20、方法

函数就是将一堆代码进行重用的一种机制。

1.函数的语法:

[public] static 返回值类型 方法名([参数列表])

{

方法体;

}

public:访问修饰符,公开的,公共的,哪都可以访问。

static:静态的

返回值类型:如果不需要写返回值,写void

方法名:Pascal 每个单词的首字母都大些。其余字母小写

参数列表:完成这个方法所必须要提供给这个方法的条件。如果没有参数,小括号也不能省略。

方法写好后,如果想要被执行,必须要在Main()函数中调用。

方法的调用语法:

类名.方法名([参数]);

***在某些情况下,类名是可以省略的,如果你写的方法跟Main()函数同在一个类中,这个时候,

类名可以省略。

2.return

1、在方法中返回要返回的值。

2、立即结束本次方法。

3、我们在Main()函数中,调用Test()函数,我们管Main()函数称之为调用者,

管Test()函数称之为被调用者。

如果被调用者想要得到调用者的值:

1)、传递参数。

2)、使用静态字段来模拟全局变量。

如果调用者想要得到被调用者的值:

1)、返回值

4、

不管是实参还是形参,都是在内存中开辟了空间的。

5、方法的功能一定要单一。

GetMax(int n1,int n2)

方法中最忌讳的就是出现提示用户输入的字眼。

6、out、ref、params

1)、out参数。

如果你在一个方法中,返回多个相同类型的值的时候,可以考虑返回一个数组。

但是,如果返回多个不同类型的值的时候,返回数组就不行了,那么这个时候,

我们可以考虑使用out参数。

out参数就侧重于在一个方法中可以返回多个不同类型的值。

2)、ref参数

能够将一个变量带入一个方法中进行改变,改变完成后,再讲改变后的值带出方法。

ref参数要求在方法外必须为其赋值,而方法内可以不赋值。

3)、params可变参数

将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理。

params可变参数必须是形参列表中的最后一个元素。

7、方法的重载

概念:方法的重载指的就是方法的名称相同给,但是参数不同。

参数不同,分为两种情况

1)、如果参数的个数相同,那么参数的类型就不能相同。

2)、如果参数的类型相同,那么参数的个数就不能相同。

***方法的重载跟返回值没有关系。

8、方法的递归

方法自己调用自己。

找出一个文件夹中所有的文件。

C#基础语法总结的更多相关文章

  1. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  2. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  3. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  4. emmet 系列(1)基础语法

    emmet 系列(1)基础语法 emmet 是一个能显著提升开发html和css开发效率的web开发者工具 emmet基本上目前已知的编辑器都有相应的插件,各个编辑器的emmet插件的下载地址:点我下 ...

  5. Scala基础语法 (一)

    如果你之前是一名 Java 程序员,并了解 Java 语言的基础知识,那么你能很快学会 Scala 的基础语法. Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的. 我 ...

  6. Java基础语法

    java基础学习总结——基础语法1 一.标识符

  7. javascript中正则表达式的基础语法

    × 目录 [1]定义 [2]特点 [3]元字符[4]转义字符[5]字符组[6]量词[7]括号[8]选择[9]断言[10]模式[11]优先级[12]局限性 前面的话 正则表达式在人们的印象中可能是一堆无 ...

  8. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  9. 黑马程序员——OC语言基础语法 面向对象的思想

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结)(一)基础语法 1)关键字 @interface.@implementati ...

  10. 【OC基础语法考试】

    OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...

随机推荐

  1. CocoaPods报错:The dependency `xxx` is not used in any concrete target

    官网是这样给推荐的: 在创建Podfile的时候,用这种格式使用, platform :ios, '8.0' use_frameworks! target 'MyApp' do pod 'AFNetw ...

  2. Xaml 页面布局学习

    对于一开始设计xaml界面的初学者,总是习惯性的拖拽控件进行布局,这样也许方便.简单.快捷,但偶尔会出现一些小错误, 当需要将控件进行很细微的挪动时也比较吃力. 这里,我个人建议用一些代码将xaml界 ...

  3. MySQL索引和锁

    索引和锁可以让查询锁定更少的行.如果你的查询从不访问那些不需要访问的行,那么就会锁定更少的行,从两个方面来看这对性能都有好处.首先,虽然innodb的行锁效率很高,内存使用也很少,但是锁定行的时候仍然 ...

  4. Ubuntu 13.10 Mono安装历程

    这两天捣鼓一下Mono,记录一下自己所遇到的问题,已经解决办法 首先,先打开gnome-terminal 1. 先更新的一下系统 sudo apt-get update sudo apt-get up ...

  5. MFC自创建类了解

    CxxxxView 视窗类 所有的按键 等消息都先在这里响应 CxxxxDoc 文档类 CMainFrame 框架类 CxxxxApp 应用程序类 CxxxxView类中的 OnDraw函数 在窗口改 ...

  6. web安全:xss && csrf

    首先在user.php文件中去除黑名单的第一行标签,在白名单中添加<script>E1:csrf攻击zoobarcsrf:cross-site request forgery    跨站伪 ...

  7. 02 - 替换SetInput方法 VTK 6.0 迁移 (2013-06-30 16:22)

    VTK6 引入了许多不兼容的变化,这其中就包括用SetInputData()和SetInputConnection()替换SetInput()方法.在先前的版本中,VTK4 引入了SetInput() ...

  8. mkbundle(1) - Linux man page

    mkbundle(1) - Linux man page Name mkbundle, mkbundle2 - Creates a bundled executable. Synopsis mkbun ...

  9. perl dbi 测试 mysql wait_timeout

    The number of seconds the server waits for activity on a noninteractive connection before closing it ...

  10. ViewPager的使用方法和实现过程

    布局文件里添加viewPager布局 <android.support.v4.view.ViewPager android:id="@+id/search_viewpager" ...