(基本可以不看了,乱七八糟的懒得整理,但是不记录下来心里不舒服)
基础
1.赋值运算符,也可以用于字符串.a+=b可以看成是a=a+b,a/=b可以看成是a=a/b,其他类似的都可以按这个思维去看待。
2.运算符的优先级笔记多,不易记,所以记住一句话:括号是王道。
3.在C#中命名的方法主要有两种:一是首字母都大写;二是首字母小写,后跟单词首字母大写
4.命名空间是一个代码的最外层空间,用关键词namespace修饰,其命名都是首字母大写,命名空间是可以相互嵌套的,最外层命名空间是全局的。
5.using用于引用命名空间:其实际的意思是:“我们需要这个命名空间的名字,不要每次总是要求使用是限制名称”。所以使用类时候需要引入类所在是命名空间才不需要全名使用,using可以减少代码量提高代码的可读性。System命名空间是.NET Fromework的根命名空间。
6.&&是并且,||是或者。&和|也是并且和或者,但是他们是按位运算符,在用于判断的时候性能没有&&和||来的好,所以基本不用,只是在按位运算的时候使用。
7.goto语句,我的理解是标签语句,他可以跳到指定标签位置执行该代码,但是这种语句容易让代码混乱,所以很少用了,但别人用的时候自己要看的懂。其用法例如:
goto myabc;
int mya=10;
console.write(mya);
myabc:console.writeLine(“执行标签”);
执行的时候,程序遇到goto语句就会跳过中间的代码不执行,去执行myabc:处的代码。
8.控制程序要点:输出语句:console.writeLine(),输出行的话会自动换行,输出句的话不会自动换行;输入语句:console.read();除了处理用户输入值外,最大的作用是放置控制台程序闪关,防止闪关多用readKey();
9.C#的文件都以.cs为扩展名
10.窗体提示信息用messageBox.show("提示");
11.窗体应用程序是以WPF Application模版创建的
12.VS中排版快捷键:Ctrl+D或K,不过只能模块排版,细的需要手动,所以要有一个良好的代码编写习惯。
13.按F12可以快速进入代码的方法,用于跟踪代码查看方法的内容
14.注释是代码编写过程中很重要的一点,需要保持写注释的习惯。而且注意的是C#中的代码是严格区分大小写的,创建文档需要遵循的XML文档规则,需要单独去看那方面的书籍了。
15.折叠代码:#region 代码说明 ........ #endregion
16.数据类型前面用带有u字母表示不能是负数的意思。char存储是是unicode字符,floot类型是值需要在后面跟上一个f或者F,不然会默认为double类型的值。
17.整型byte,short,int,long,sbyte,ushort,uint,ulong。
18.浮点型:float,double,decimal
19.文本类型:char,string
20.bool类型的值只有true和false
21.转义符:空格 ,警告a,退格,换页f,换行
,回车
,水平制表符 ,垂直制表符v
22.一字不变的指定字符串前加@,多用于地址和网址:不需要@的时候应该这样写地址:"c:\a\b\c.txt",用了@后,则是@"c:ac.txt"就不用那么多转义符了提高代码的可读性。
23.加加++总是使操作数加1,渐渐--总使操作数减1。
24.避免错误产生的是类型转换方法:convert.ToDouble(),ToInt32(),ToString().....把要转换的类此当参数传入。
用法如:int myab=10;string mysrt=convert.ToString(myab);
分支:
1.三元运算符:a?b:c,意思是a是ture的时候,返回b,否则返回c。a一般是bool类型的判断表达式。
2.如果否则语句:if(){}else{},一个if()后面只能跟着一个else,if语句可以相互嵌套。else后面也可以不跟{},而跟一个新的if()
基本用法:
if(){};
if(){}else{};
if(){}else if(){}...
if(){ if(){}....}else...
最好的if语句后面都要跟这else。
3.开关语句:switch(){case..default },
基本用法:
switch(mya)//mya不能是bool判断语句
{
case a:....;//当 mya=a执行这个语句,
break;
case b:....;//mya=b,执行这个语句
break;//必须带有跳出循环的语句break
default:....;//都不等于a和b时候执行这个语句
}
switch(mya)
{
case a;
case b;......//mya=a或b时候执行这个语句,这种语句只用一个break就行
break;
default:...
}
4.while(mybool){}循环语句,当mybool是ture时候循环{}中的代码;do{}while(mybool);先执行do{}的代码在进行判断是否循环;
5.中断循环:立即终止循环:break;立即终止当前单词循环:continue;跳到出循环到指定标签处:goto;跳出循环及包含循环的函数:retrun;
转换:
1.隐式转换,不要任何操作,小空间类型可以放到大空间类型中进行隐式转换,但大空间类型不能隐式转换为小空间,因为大的放不进小的。
2.显示转换,想象称为盒子,小盒子可以放到大盒子里,大盒子不能放入小盒子。所以大容量变量类型不能放入小容量变量类型。强行会出现误差,强制转换用(类型)来完成,例如:int a=10,string b=(string)a,无法检查错误。第二种方法:b=Convert.ToString(a),这种方最好,可以检查错误。
枚举
1.枚举:是一直可以自定义值类型的类,用enum来修饰,(1)定义该类:enum myabc{a=1,b=2,c=3};使用枚举:声明这个类myabc Myabc=new myabc();然后调用Myabc.a,如果没有赋值则是默认值,另外需要注意的是,正常用myabc.a使用,结果显示的知识a,所以需要把他的值显示出来则用convert,ToInt(myabc.a);他的值只能是定义中的值。这种没有定义变量类型的枚举,默认是Int类型的,里面的abc都是int类型。(2)如果需要指定则用这种方法定义:enum myabc:byte {a=1,b=2,c=3};其他是一样的。(3)枚举的类型基本是整数,如果需要使用string类型,则要用到Enum.Parse()方法,用法:string mystring; myabc Myabc=(myabc)Enum.Parse(typeof(myabc),mystring)。其中typeof()方法可以得到一个类的类型。
2.结构,和枚举一样是一直特殊的类,也是可以自定义值的,用struct定义:struct mystruct{public int a,public eunm myabc,...},注意定义值的时候是要public的。结构的特点就是定义的值类型可以多样化,其除了定义的方法不一样外,其他的和枚举的使用是一样的,可以理解为是一种特殊的枚举。结构是一种值类型,类是一种引用类型。
数组
1.一纬数组:数组用来存储同一个类型的值,以索引下标为0开始,声明方法(1)指定大小后赋值:int[] myInt=new int[4],然后一一赋值myInt[0]=2;myInt[1]=4;..;(2)不指定大小,声明时候赋值:int[] myInt={2,3,5,8},可以用length取得该数组的长度。需要注意的是,数组的长度和下标的起始数不一样,一个是1开始,一个是0开始。
2.多纬数组:声明方法int[2,3] myInt= new int[2,3],表示有3个纬度,每个纬度下有4个子纬度,用法依次类推,赋值也是一样的:myInt[0][0]=2,...
,也可以int[2,3] myInt={{2,3,4},{5,6,7},{8,9,0}},因为具有规律性所以叫矩形数组
3.数组中的数组,锯齿数组:int[][] myInt=new int[2][],因为其具有不规律性,只能指定到第一纬。二纬的需要在赋值时候指定。赋值并声明二纬:myInt[0]=new int[2];myInt[1]=new int[1];..然后依次给子数组赋值myInt[0][0]=10;..依次类推。
4.数组的遍历:(1)用for()循环遍历。可以对数组进行修改,但需要知道数组的长度,遍历一纬的时候方法,但多纬的时候麻烦。(2)用迭代器变量foreach().用法:foreach(int a in myInt){console.write(a);},做法是把myInt数组的没一个元素依次赋值给a,通过显示a把数组的元素显示出来,所以这个是一种只读的变量方法,不能通过a去改变数组的值,这遍历发不需要知道数组的长度,用起来方便。
字符串处理是很编写代码中非常重要的处理之一
1.字符串是不可变的,但可以把字符串的组成元素以char的形式取得,然后组成新字符串,所以可以把字符串理解为char的类型数组,用mystr.ToCharArray()方法把一个字符串的以char为单位取出来返回一个char[mystr.length]数组。。然后把这个数组组成一个新字符串,然后通过对这个数组的成员修改达到对字符串修改的效果,可以声明一个新字符串,把char数组作为参数传入。
2.大小写:字符串转为小写:用mysrt.ToLower();字符串转为大写用:mysrt.ToUpper();
3.删除字符串前后字符:mysrt.Trim(),如果缺省,则删除空格符号。参数是指定的字符数组。
4.删除字符串左边空格用:mysrt.TrimStart();去字符串右边空格用:mysrt.End();
5.删除字符串右边添加空格:PadLeft(10);在字符串左边添加空格:PadRight(5),参数是添加的空格数量
6.删除:Remove()方法从一个字符串的指定位置开始,删除指定数量的字符。Remove(int a,int b);a是开始索引,b是数量
6.替换:替换字符串中的指定字符或字符串:Replace(指定元素,替换元素),将此实例中的指定 Unicode 字符或 String 的所有匹配项替换为其他指定的 Unicode 字符或 String。
7.ToString():将实例的值转化为字符串
8.截取:Substring(int int):从指定索引位置截取执行个数,返回一个字符串
9.比较:String支持两个比较运算符“==”、“!=”。如果两个字符串st1和st2相等,st1.Equals(st2)返回值为True;否则,返回False。
10.判断一个字符串是否是以指定字符串为开头StartsWith(),返回一个布尔值
11.判断一个字符串是否是以指定字符串为结尾EndWith(),返回一个布尔值
12.检索字符串:在一个字符串中检索指定字符或字符串第一次出现的位置,返回int类型的索引,如果没有返回以个-1。IndexOf(),可以添加指定开始索引位置和从起始位置开始搜索的字符数。LastIndexOf()则表示最后一次出现的位置
13.检索字符数组:在一个字符串中检索指字符数组中任意一个成员第一次出现的位置,返回int类型的索引,如果没有返回以个-1。IndexOfAny(),最后一次出现用LastIndexOfAny()
14.格式化字符串:String newStr=String.Format("{0}{1}!",strA,strB);
15.链接字符串:连接运算符“+”和String.Concat()方法都一样的效果,Mytring=String.Join("指定字符",char[])方法则把字符数组中成员按指定符号隔开链接成一个新字符串
16.分隔字符串:Split();一字符串按指定参数字符把分隔成一个新字符数组
用多个字符来分隔:string[] sArray=str.Split(new char[2] {'j','s'});
用1个字符来分隔:string[] sArray=str.Split('j');
用字符串分隔:string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);
17.插入和填充:Insert(intstartIndex,stringvalue);在一个字符串中按指定一个索引位置插入一个指定的子字符串
18.复制一个字符串到一个字符数组中:CopyTo(int a, myabc, int b, int c);a是复制字符串的起始索引,b是目标字符数组接收字符的起始索引,c是接收字符的个数,myabc是目标字符数组
函数
1.函数命名一般单词首字母都大写,C#中函数都用static修饰,有返回类型的用retrun返回,无返回类型用void,Main()方法是程序的主入口
2.函数重载,具有同名不同参数类型或者参数个数的函数,根据参数来判断调用何中函数。
3.结构函数,就是在结构这种类中也允许有函数,但是结构类中要求成员必须是public的,所以结构函数不能是static而必须是public的。用法就和一般类一样,需要声明再使用。
4.委托:用delegate关键字定义,委托事件必须和委托相同的返回类型和相同的参数,多在多线程开发的时候使用委托。用法例如:类似定义类一样定义一个委托,他需要一个返回类型和参数:delegete int myabc(int a);需要委托用的方法比如static ine bb(int a){};在main()方法中先声明委托出来myabc Myabc;然后在需要的时候把调用委托方法当参数传递给委托Myabc=new myabc(bb),因为取代了委托的参数,所以委托的事件的参数要和委托参数一样。
捕获和处理错误:
try{}carch(exception e){}finaly{}
抛异常throw