C#基础知识学习札记

来源:互联网 发布:吉祥抽奖软件 编辑:程序博客网 时间:2024/05/19 02:42
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace helloWorld{    enum qqState { online, offline, hidden }    enum gender { Male, Female, Unkown }//枚举申明举例    class Program    {        static void Main(string[] args)        {            string hello = "Hello ";            Console.WriteLine("please input a name:");            string s = Console.ReadLine();            Console.WriteLine(hello + s + "!");//换行输出            Console.WriteLine("please input the first no.:");            string str1 = Console.ReadLine();            int no1 = Convert.ToInt32(str1);            Console.WriteLine("please input the second no.:");            int no2 = Convert.ToInt32(Console.ReadLine());//直接读入            Console.WriteLine("{0}+{1}={2}", no1, no2, no1 + no2);            string ss = @"\\\\";//@表示\不表示转义符,直接输出,@只对转义符有用            Console.WriteLine(ss);            gender g = gender.Male;//枚举用法            Console.WriteLine(g);            int[] a = new int[5];            a[0] = 1;            Console.WriteLine(a.Length);            Console.WriteLine("循环输出数组");            for (int i = 0; i < a.Length; ++i)            {                a[i] = i + 1;                Console.WriteLine(a[i] * a[i]);            }            string[] strName = new string[5] { "Jim", "Mike", "Lily", "Lucy", "John" };            foreach (string strOut in strName)//foreach使用            {                Console.WriteLine("My name is {0}", strOut);            }            Console.WriteLine("调用函数输出字符数组");            Vfunc(strName);            Console.ReadKey();//从键盘读入一个按键,然后退出        }        static void Vfunc(params string[] values)//加params表示参数个数可变        {            foreach (string strOut in values)//foreach使用            {                Console.WriteLine("My name is {0}", strOut);            }        }        static int Vfunc(string str, int defaultVariable = 10, params int[] values)            //.net4.0参数默认值——可变参数数组params必须是放在后面            //函数重载:函数名相同,参数个数或类型不同,与返回值类型无关        {            return 0;        }    }}

.net特点

平台无关:CLR(公共语言运行时Common Language Runtime)、.Net Framework进行了隔离。学会.Net什么都能开发,知识移植。更安全、更省心:代码托管、罕用指针、垃圾回收。
语言无关:VB.Net、C#都调用同样的类、同样的方法,VB.Net写的类C#也可以调用。模糊了语言的差别。

 C#基础知识
Visual Studio显示代码行号方法:工具→选项→文本编辑器→C#→显示→行号;
VS自动更新代码格式:Ctrl+K,Ctrl+D。//可以点击 编辑→高级 查看所需要的快捷键。
C#源文件一般以.cs结尾,C#程序的入口是Main函数,大小写敏感。
C#三条控制台指令:
Console.WriteLine():打印输出、Console.ReadLine():从控制台读入一行、Console.ReadKey():控制台暂停。

常用基本数据类型:string、int、char、bool、decimal、byte、double、long、float等
bool的取值:true、false;
代码所示@"\\\\";@表示字符串中的\不当成转义符;@不是万能的,不能解决字符串中有双引号的问题,如果有双引号还是用转义符。另外@可以表示多行字符串。

String str=Console.ReadLine();
Console.WriteLine(str);
//注意ReadLine()得到的都是字符串,不能用其他类型去接。需要其他类型用Convert。
简单的类型转换:Convert.ToString()、ToString()、Convert.ToInt32() 。
int i = Convert.ToInt32(Console.ReadLine());

变量的命名规则:
第一个字符必须是字母或者下划线(_),其后的字符可以是任意个数字、字母、下划线。不能全部使用C#的关键字,比如class、namespace、new、void等。判断方式:VS中亮蓝色的就是关键字。(这也是类、函数等的命名规则)。中文变量名(类名、函数名)。
C#中建议变量的开头用小写。以后每个单词首字母大写,即驼峰命名规则。变量命名要用有意义的变量名。

运算符:+ 、- 、* 、/ 、%(求余)、++(自增)、--(自减)、+=、-=、*=、/=。
// + 可以用作字符串连接,其他不可以。将string和其他类型+,会自动tostring();
变量可以和字面量混合运算。赋值运算符=,让左边变量的值等于右边的计算结果。
注意:++i和i++的区别:前者先把i自增再把自增后的值赋给其他变量,后者先把i的值赋给其他变量,再自增。例如:
int i = 5;int j = i++;//这里j = 5,i = 6
int i = 5;int j = ++i;//这里j = 6,i = 6
相等判断:==
WriteLine("{0}",i==1);WriteLine("{0}",i=1);的区别。
不等判断:!= 大小比较:<、>、<=、>= 取反:! 组合运算:&&(并且)、||(或者)。

if...else...、switch(){case:...defult:} 、while() 、for(;;)
while(Console.ReadLine()!="admin")
C#中的break不写是不行的,除了合并case的情况
break和continue的区别:
break:立即终止整个循环。
continue:立即终止当前循环步骤,进行下一次循环步骤。
还有个return是直接返回函数调用处。return不是结束程序,只是结束当前函数,控制台程序中Environment.Exit(0)退出程序。
foreach循环和for的区别:
for可以不逐个遍历,比如每隔一个遍历一个,或者可以从后向前遍历,
foreach只能(只应该)对集合进行读,而不应该写。如代码中例子。

类型转换Cast:隐式转换、显式转换。当目标类型一定能满足源类型转换过去后的要求的话就是隐式转换;如果当目标类型不一定能满足源类型转换过去后的要求的话就需要显式转换(程序员自己负责)。只有在内存存储上存在交集的类型之间才能进行Cast,否则则不可以,比如不可以int i;string s= (string)i;反之也不可以。这种情况必须用Convert类提供的方法。
类型转换Convert:Convert不再是内存级别的转换,而是考虑数据意义的转换。Convert.ToInt32、Convert.ToString、每种类型都还有ToString方法(类型的ToString和Convert.ToString略微有些差别)

字符串的处理:
C#中单个字符用单引号包含就是char类型,'a',单引号中放且只能放一个字符。
使用str.Length属性来获得字符串中的字符个数,这里的返回个数不包括C语言中包含的最后的 \0 ,是实际个数。
string可以看做是char的只读数组。C#中字符串有一个重要的特性:不可变性,字符串一旦声明就不再可以改变。所以只能通过索引来读取指定位置的char,不能对指定位置的char进行修改。如果要对char进行修改,那么就必须创建一个新的字符串,用str. ToCharArray()方法得到字符串的char数组,对数组进行修改后,调用new string(char[])这个构造函数来创建char数组的字符串。一旦字符串被创建,那么char数组的修改也不会造成字符串的变化。
String类常用函数:
注意字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。
ToLower():得到字符串的小写形式。strReturn = str.ToLower();
ToUpper():得到字符串的大写形式; Trim()去掉字符串两端的空白。
str1.Equals(str2, StringComparison.OrdinalIgnoreCase),两个字符串进行比区分大小写的比较。
字符串的分割:
string[] Split(params char[] separator):将字符串按照指定的分割符分割为字符串数组;
string[] Split(char[] separator, StringSplitOptions options)将字符串按照指定的char分割符分割为字符串数组( options 取RemoveEmptyEntries的时候移除结果中的空白字符串);
string[] Split(string[] separator, StringSplitOptions options)将字符串按照指定的string分割符分割为字符串数组。
字符串函数详解:
字符串替换:string Replace(string oldValue, string newValue)将字符串中的出现oldValue的地方替换为newValue。
取子字符串:string Substring(int startIndex),取从位置startIndex开始一直到最后的子字符串;
string Substring(int startIndex, int length),取从位置startIndex开始长度为length的子字符串,如果子字符串的长度不足length则报错。
bool Contains(string value)判断字符串中是否含有子串value
bool StartsWith(string value)判断字符串是否以子串value开始;
bool EndsWith (string value)判断字符串是否以子串value结束;
int IndexOf(string value):取子串value第一次出现的位置。

可以使用string[] lines = System.IO.File.ReadAllLines(@"c:\root.ini", Encoding.Default);从文本文件读取数据,返回值为string数组,每个元素是一行。

枚举:enum QQStatus{online,offline,hidden}
枚举的用法:QQStatus status = QQStatus.online;
用枚举的好处就是限定了变量的取值范围,程序处理起来更方便。

数组:任意类型都可以声明数组。int[] nums = new int[5];
使用索引器访问指定编号位置的元素,访问数组元素:nums[0]、nums[1]。索引从0开始。取到的元素的类型就是数组元素的类型。还可以对数组元素进行赋值
注意:数组的长度一旦声明就无法改变

函数(也称方法)就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会有返回值。
Console.ReadLine就是一个有返回结果的函数;
Console.WriteLine("Hello World!")就是一个有执行参数的函数,只有告诉WriteLine被打印的数据它才知道如何打印;
Convert.ToInt32("22")则是一个既有参数又有返回值的函数。
函数名开头大写,参数名开头小写,参数名、变量名要有意义。
可变参数:参数前加params
参数数组:int Fun(params int[] values)
int Fun(string name,params int[] values)可变参数数组必须是最后一个
参数默认值(.Net4.0) :void Fun(string str,int num=20)
函数重载(函数重名)
构成重载的条件:函数名相同,参数类型不同或者参数个数不同,与返回值类型无关。

函数的ref、out参数:函数参数默认是值传递的,也就是“复制一份”。
ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。
ref应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。