C#从入门到精通(1)

目录

第一章 C#与VS介绍

第二章 第一个C#程序

(1)C#程序基本组成

1.命名空间

2.类

3.Main方法

4.注释

5.语句

6.标识符及关键字

(2)程序编写规范

1.代码编写规则

2.程序命名方法

3.元素命名规范

[第三章 变量](#第三章 变量)

(1)变量的声明及初始化

1.声明

2.初始化

3.变量作用域

(2)数据类型

1.值类型

2.引用类型(存储对值的引用)

3.值类型与引用类型的区别

4.数据类型转换

(3)常量

1.常量的分类

[第四章 表达式](#第四章 表达式)

(1)运算符

(2)运算符优先级与结合性

[第五章 字符](#第五章 字符)

(1)字符串

(2)字符串操作

(3)可变字符串(StringBuilder)


本文主要介绍C#入门的基础知识,希望能帮助大家更好的学习C#。学习课程是------C#从入门到精通(第5版)_哔哩哔哩_bilibili

如有时间,推荐看视频学习。本文主要对其进行总结。需要有一定的语言基础。

第一章 C#与VS介绍

想了解可以看视频。这里不再过多赘述。(视频安装的VS版本较老,建议装新的)。

第二章 第一个C#程序

cs 复制代码
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 | 用另一个指定的字符替代对象中的字符 |

示例:

cs 复制代码
  StringBuilder title = new StringBuilder("(),(),(),2、4、6、7、8");
  Console.WriteLine(title);
  title.Remove(0, 9);
  title.Insert(0, "(门前大桥下),(游过一群鸭),(快来快来数一数),");
  Console.WriteLine(title);

字符串和可变字符串区别

string操作会产生额外的副本,占用空间,效率低。

stringBuilder操作不会产生额外的副本,效率高。

示例

cs 复制代码
  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);
 }

运行结果

cs 复制代码
string消耗的时间:116
StringBuilder消耗的时间:2

从结果可以看出,对string和stringBuilder进行20000次操作,执行时间相差几十倍。这对程序性能的优化很重要。

第一部分笔记到此为止,后续也会分享,详细内容还是推荐大家看视频学习。

相关推荐
八了个戒35 分钟前
「JavaScript深入」Socket.IO:基于 WebSocket 的实时通信库
开发语言·前端·javascript·websocket
锐策40 分钟前
『 C++ 』多线程编程中的参数传递技巧
开发语言·c++
橙-极纪元41 分钟前
【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势
java·开发语言·java多线程·新建线程有几种写法
互联网搬砖老肖1 小时前
编程语言选择分析:C#、Rust、Go 与 TypeScript 编译器优化
golang·rust·c#
沐墨专攻技术1 小时前
函数(C语言版)
c语言·开发语言
Plips1 小时前
python|exm5-3re模块,正则表达式概念介绍|match()、search()、findall()、sub()、split()
开发语言·python
赴前尘1 小时前
go + vscode + cline +qwen 快速构建 MCP Server
开发语言·vscode·golang
珹洺1 小时前
C++从入门到实战(六)类和对象(第二部分)C++成员对象及其实例化,对象大小与this详解
java·开发语言·汇编·数据结构·c++·sql·算法
小林熬夜学编程2 小时前
【高并发内存池】第三弹---构建Central Cache的全方位指南——从整体设计到核心实现
c语言·开发语言·数据结构·c++·算法
南部余额2 小时前
解决python配置文件类configparser.ConfigParser,插入、读取数据,自动转为小写的问题
开发语言·python·configparser