目录
本文主要介绍C#入门的基础知识,希望能帮助大家更好的学习C#。学习课程是——C#从入门到精通(第5版)_哔哩哔哩_bilibili
如有时间,推荐看视频学习。本文主要对其进行总结。需要有一定的语言基础。
第一章 C#与VS介绍
想了解可以看视频。这里不再过多赘述。(视频安装的VS版本较老,建议装新的)。
第二章 第一个C#程序
using System; //引用命名空间
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1 //命名空间
{
internal class Program //类
{
static void Main(string[] args) //入口
{
Console.WriteLine("hello world"); //C#标准输出
Console.ReadLine(); //C#标准输入
}
}
}
(1)C#程序基本组成
1.命名空间
C#中的一种代码组织形式,主要用来标识类的可见范围。例如consoleApp1。
定义:namespace 命名空间名称
引用:using 命名空间名称
2.类
一种数据结构,存储数据成员,方法成员和其他类等内容,便于调用。例如program。
定义:class 类名 { // 代码 };
使用:实例化一个类对象。
3.Main方法
C#程序的入口。要求:1.必须定义为static、2.首字母必须大写、3.返回值只能为void或int(必须有return)、4.命令行参数可选。
4.注释
对代码功能进行说明。
分类:行注释 用法:// 注释内容
块注释 用法:/* 注释内容 */
5.语句
实质上是实现各种功能的C#代码。
6.标识符及关键字
标识符:类似于一个名字,例如类名、变量名、方法名、数组名等。
命名要求:1.首字母为字母或下划线,其余部分为数字、字母和下划线。2.标识符不能与关键字冲突。3.区分大小写。
关键字:表示特定的意义。C#常用的关键字如下所示。
int | public | this | finally | boolean | abstract |
continue | float | long | short | throw | return |
break | for | foreach | static | new | interface |
void | try | switch | else | catch | private |
if | goto | default | byte | do | case |
double | protected | while | char | class | using |
(2)程序编写规范
1.代码编写规则
尽量使用接口编程,关键语句一定编写注释。
局部变量随用随声明,尽量少用goto语句。
如果参数多建议使用结构,避免对大段代码使用try...catch。
一个文件避免编写多个类,字符串多变时用StringBuilder。
if语句块中使用“{ }”,switch语句一定编写default。
2.程序命名方法
Pascal命名法:所有单词第一个字母大写,其他小写。如User。
Camel命名法(驼峰命名法):除了第一个单词,所有单词第一个字母大写。其他小写。如userName。
3.元素命名规范
项目名/命名空间名:项目名称。
接口:一切接口始于“I”。
类名:与功能或操作切合。
方法名:体现方法的操作。
成员变量:尽量加前缀“_”。
第三章 变量
(1)变量的声明及初始化
一个变量就是存储区中的一个存储单元。
1.声明
根据类型分配空间。 变量类型 变量名 = 数值;如 int i =100;
变量命名规则:首字母为字母或下划线+其余部分(数字、字母和下划线)、简单表明变量的作用。不能与关键字冲突、区分大小写、不能用汉字。
2.初始化
将数据存入内存空间。如 money = 100;
初始化的三种方法:1.单独初始化变量。2.声明时初始化。3.同时初始化多个变量。
3.变量作用域
成员变量:类中定义的变量。(作用域:类内)。常用:1.静态变量(加static) 2.实例变量
局部变量:一对“{}”中定义的变量。(作用域:{ }内)。
(2)数据类型
1.值类型
简单:数值型(如int 、float等)(使用时注意取值范围)。特殊的:decimal(精度达到28位)主要用于货币计算。
字符(char)
布尔(bool):主要用于表示true/false值。例如,bool x = true;
复合:结构体、枚举:enum 枚举名{值1,值2 ....}
2.引用类型(存储对值的引用)
类(object类(基类):所有类的基类。string类(不可改变性):简化字符串操作。
接口、数组、委托。
3.值类型与引用类型的区别
值类型传递是复制到各自的区域(存储在栈区),引用类型传递则指向同一块区域(存储在堆区)。
4.数据类型转换
隐式类型转换:自动进行类型转换。要求两种类型兼容,目标精度大于源类型。例如int转double。
显式类型转换:1.(类型名)表达式。例如 int a = (int) 10.2;高精度转低精度会截断。精度损失。不能溢出。
2.convert.to类型名(表达式)。溢出会提示错误。
3.类型名.parse(表达式)(只能用于数值类型)
装箱:值类型->引用类型 例如:object obj = 值;
拆箱:引用类型->值类型 例如:int j = (int)obj;类型一致
(3)常量
定义:不能被改变的量。
1.常量的分类
编译时常量(使用const定义)与运行时常量(使用readonly定义)。
区别:const需要初始化,readonly不需要初始化。
第四章 表达式
表达式:由运算符和操作数组成的。
(1)运算符
算数运算符:+、-、*、/(不能除以0)、%(求余结果符号与左操作数符号一致)。
赋值运算符:=
复合赋值运算符:将赋值运算符和其他运算符结合使用,从而实现两种运算法效果。
例如:+=、-=、/=、&=、>>=、%=等。自动完成类型转换。
关系运算符:==(相等)、>=(大于等于)、<=(小于等于)、!=(不等)、>、<。
逻辑运算符:&&或&(与)、||或|(或)、!(非)。&&与||是短路运算符,第一个条件满足就不会判断第二个条件。
位运算符:&(位与)、|(位或)、位取反(~)、位异或(^)。<<(左移)、>>(右移)
条件运算符:判断表达式?结果1:结果2;true——结果1,false——结果2。
逗号运算符:<表达式1>,<表达式2>,...,起连接作用
is运算符:对象 is 类型。对象是不是该类型。是返回true,不是false。
(2)运算符优先级与结合性
第五章 字符
字符:C#语言中,使用char/Char类定义字符,并且只能用单引号括起来单个字符。
转义字符:以‘\’开头,后跟一个或多个字符。具有特定含义。
(1)字符串
声明:string 字符串名;
初始化:1.引用字符串常量。例如,string a = “你好”;
2.使用字符数组或其中一部分初始化。例如,string a = new string(char[] value), string a = new string(char[] value,int offset,int count);
空字符串和空引用的区别
string s1 = " "; 是个字符串,分配了空间,只是没有数据而已。
string s2 = null; 空对象,没有指向任何地址。
(2)字符串操作
1.连接字符串:使用“+”号运算符实现拼接功能。例如 string a = “123”+“456”;
2.比较字符串
1.compare方法。string.compare(str1,str2) 1大于,-1小于,0相等。
2.compareTo方法。s1.compareTo(s2);
3.euqals方法。相等返回true,不相等false。string.equals(s1,s2);
字符比较的顺序:空字符<数字<小写字母<大写字母<汉字。
3.格式化字符串
使用string提供的Format方法。例如,string s1 = string.Format("{0}*{1} = {2}",2,3,6);
格式说明符 | 名称 | 实例 |
C | 货币 | ¥100 |
D | Decimal | 1234 |
E | 指数 | 1.05e+003 |
F | 定点 | 1234.56 |
N | Number | 1,234,567 |
P | 百分比 | 100% |
X | 十六进制 | 00ff |
标准日期时间格式
另一种格式化方法
使用tostring方法。 例如:int money = 100; money.tostring("C");
4.截取字符串
string类的Substring方法。
例如 str.Substring(int startIndex)或str.Substring(int startIndex,int length);
超出索引范围会报错。下标是从0开始。
5.分割字符串
string类的split方法。
例如str.Split(new char[] {‘,’});或str.Split(new char[] {‘,’},2);
6.插入字符串
string类的Insert方法。例如 str.Insert(int startIndex,string value);
7.删除字符串
string类的Remove方法。例如str.Remove(int startIndex)/str.Remove(int startIndex,int count);
8.复制字符串
string类提供的Copy方法。例如string.Copy(string str);(全部复制)
str.CopyTo(int start,char[] des,int start_des,int count);(部分复制)
9.替换字符串
string类的Replace方法。例如 str.Replace(char oldchar,char newchar);或str.Replace(string oldchar,string newchar)。
(3)可变字符串(StringBuilder)
常用方法
方法 | 说明 |
Append | 将字符串追加到指定对象末尾 |
AppendFormat | 自定义变量的格式并将这些值追加到对象末尾 |
Insert | 将字符串或对象添加到当前对象的指定位置 |
Remove | 从当前对象移除指定数量的字符 |
Replace | 用另一个指定的字符替代对象中的字符 |
示例:
StringBuilder title = new StringBuilder("(),(),(),2、4、6、7、8");
Console.WriteLine(title);
title.Remove(0, 9);
title.Insert(0, "(门前大桥下),(游过一群鸭),(快来快来数一数),");
Console.WriteLine(title);
字符串和可变字符串区别
string操作会产生额外的副本,占用空间,效率低。
stringBuilder操作不会产生额外的副本,效率高。
示例
static void Main(string[] args)
{
string str = "";
long startTime = DateTime.Now.Millisecond;
for(int i = 0; i < 20000; i++)
{
str +=i;
}
long endTime = DateTime.Now.Millisecond;
long time = endTime - startTime;
Console.WriteLine("string消耗的时间:"+time);
StringBuilder sb = new StringBuilder("");
long startTime2 = DateTime.Now.Millisecond;
for (int i = 0; i < 20000; i++)
{
sb.Append(i);
}
long endTime2 = DateTime.Now.Millisecond;
long time2 = endTime2 - startTime2;
Console.WriteLine("StringBuilder消耗的时间:" + time2);
}
运行结果
string消耗的时间:116
StringBuilder消耗的时间:2
从结果可以看出,对string和stringBuilder进行20000次操作,执行时间相差几十倍。这对程序性能的优化很重要。
第一部分笔记到此为止,后续也会分享,详细内容还是推荐大家看视频学习。