1.using关键字
using System;
using 关键字用于在程序中包含命名空间
2.class关键字:用于声明一个类
3.成员变量:变量是类的属性或数据成员,用于存储数据
4.成员函数:函数是一系列执行指定任务的语句。类的成员函数是在类内声明的
5.C#标识符:
6.C#关键字:
7.C#数据类型
在C#中,变量分为以下几种类型:
①值类型
②引用类型
内置的引用类型有:object,dynamic和string.
③指针类型
8.C#类型转换:
①隐式类型转换:这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失.
②显示类型转换:显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失.
9.C#变量:
10.C#运算符
①算术运算符
②关系运算符
③逻辑运算符
④位运算符
⑤赋值运算符
⑥其他运算符
⑦C#中的运算符优先级
11.C#判断
判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的).
12.?:运算符
条件运算符?:,可以用来替代if…else语句.
条件(三元)运算符,它的作用是根据条件表达式的结果来返回两个可能的结果之一.
Exp1 ? Exp2 : Exp3;
Exp1,Exp2,Exp3是表达式. ?表达式的值是由Exp1决定的.如果Exp1为真。如果Exp1为假,则计算Exp3的值,结果即为整个?表达式的值.
13.C#循环
14.循环控制语句
15.无限循环
16.C#封装
封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中".在面向对象程序设计方法论中,封装是为了防止对实现细节的访问.
抽象和封装是面向对象程序设计的相关特性.抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象.
C#封装,设置使用者的访问权限,并通过访问修饰符来实现.
一个访问修饰符定义了一个类成员的范围和可见性.
public:所有对象都可以访问.
private:对象本身在对象内部可以访问.
protected:只有该类对象及其子类对象可以访问.
internal:同一个程序集的对象可以访问.
protected internal:访问限于当前程序集或派生自包含类的类型.
Public访问修饰符:
Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。
using System;
namespace RectangleApplication
{
class Rectangle
{
//成员变量
public double length;
public double width;
public double GetArea()
{
return length*width;
}
public void Display()
{
Console.WriteLine("长度{0}",length);
Console.WriteLine("宽度{0}",width);
Console.WriteLine("面积{0}",GetArea());
}
}
class ExecteRectangle
{
static void Main(string[] args){
Rectangle r = new Rectangle();
r.length = 4.5;
r.width = 3.5;
r.Display();
Console.ReadLine();
}
}
}
Private访问修饰符:
Private访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏. 只有同一个类中的函数可以访问它的私有成员. 即使是类的实例也不能访问它的私有成员.
using System;
namespace RectangleApplication
{
class Rectangle
{
//成员变量
private double length;
private double width;
public void Acceptdetails()
{
Console.WriteLine("请输入长度:");
length = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("请输入宽度:");
width = Convert.ToDouble(Console.ReadLine());
}
public double GetArea()
{
return length*width;
}
public void Display()
{
Console.WriteLine("长度:{0}",length);
Console.WriteLine("宽度:{0}",width);
Console.WriteLine("面积:{0}",GetArea());
}
}
class ExecuteRectangle
{
static void Main(string[] args)
{
Rectangle r = new Rectangle();
r.Acceptdetails();
r.Display();
Console.ReadLine();
}
}
}
Protected访问修饰符
Protected 访问修饰符允许子类访问它的基类的成员变量和成员函数.
Internal访问修饰符
Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象.
Protected Internal 访问修饰符
Protected Internal访问修饰符允许在本类,派生类或者包含该类的程序集中访问.这也被用于实现继承.
17.C#方法
一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main 方法的类。
要使用一个方法,您需要:
- 定义方法
- 调用方法
19.
20.
21.C#可空类型(Nullable)
C#单问号?与双问号??
?:单问号用于对int,double,bool等无法直接赋值为null的数据类型进行null的赋值,意思是这个数据类型是NullAble类型的.
22.C#数组(Array)
数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合.数组中某个指定的元素是通过索引来访问的.
所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素.
①声明数组
②初始化数组
③赋值给数组
④访问数组元素
⑤使用foreach循环
⑥C#数组细节
23.C#字符串(String)
在C#中,你可以使用字符数组来表示字符串,但常见做法是使用string关键字来声明一个字符串变量. string关键字是System.String类的别名.
String.Compare(str1, str2) == 0 的条件判断可以用来检查两个字符串是否相等
str.Contains(“test”) 用于字符串查找、过滤、或简单的条件检查
24.C#结构体(Struct)
在C#中,结构体是值类型数据结构. 它使得一个单一变量可以存储各种数据类型的相关数据. struct关键字用于创建结构体.
结构体是用来代表一个记录.
25.C#结构的特点
26.类vs结构
27.C#枚举(Enum)
28.C#类(Class)
29.成员函数和封装
30.C#的构造函数
31.C#中的析构函数
32.C#类的静态成员
33.C#继承
34.基类的初始化
35.C#多重继承
36.C#多态性
函数重载
可以是参数列表中的参数类型不同,也可以是参数个数不同.
37.C#运算符重载
38.
39.C#接口(Interface)
40.C#命名空间
命名空间的定义:namespace
41.C#预处理器命令
#define预处理器
42.C#正则表达式
①字符转义
②字符类
③定位点
④分组构造
⑤限定符
⑥反向引用构造
⑦备用构造
⑧替换
⑨杂项构造
Regex类
以’m’开头以’e’结尾匹配
43.C#异常处理
C#中的异常类
44.C#文件的输入与输出
文本文件的读写:StreamReader 和 StreamWriter有助于完成文本文件的读写.
二进制文件的读写:BinaryReader 和 BinaryWriter 类有助于完成二进制文件的读写.
文件预览:
sheetjs网页读取excel网站
45.C#特性
46.C#反射
47.C#属性
48.C#索引器
49.C#委托
多播委托主要用于事件处理,因为它允许将多个事件处理程序绑定到同一个事件,并在事件发生时依次执行这些处理程序.
public delegate void MyDelegate(string message);
MyMulticastDelegate是一个多播委托,它允许添加多个无参方法.
50.C#事件
51.C#集合
①动态数组
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建一个整数类型的动态数组(List)
List<int> numbers = new List<int>();
// 添加元素到列表中
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
numbers.Add(4);
numbers.Add(5);
// 遍历列表中的元素并打印出来
foreach (var number in numbers)
{
Console.WriteLine(number);
}
// 修改列表中的元素
numbers[0] = 100; // 将第一个元素修改为100
Console.WriteLine(numbers[0]); // 输出: 100
// 删除列表中的元素
numbers.RemoveAt(0); // 删除第一个元素
Console.WriteLine(numbers[0]); // 输出: 2,因为第一个元素被删除了
}
}
区别:动态数组和静态数组的区别
②排序列表
using System;
using System.Collections;
class Program
{
static void Main()
{
//排序列表
SortedList<string, int> sortedList = new SortedList<string, int>();
// 添加元素到 SortedList
sortedList.Add("apple", 1);
sortedList.Add("banana", 2);
sortedList.Add("cherry", 3);
// 访问和输出元素
Console.WriteLine(sortedList["apple"]); // 输出: 1
Console.WriteLine(sortedList["banana"]); // 输出: 2
Console.WriteLine(sortedList["cherry"]); // 输出: 3
// 修改元素的值
sortedList["apple"] = 100;
Console.WriteLine(sortedList["apple"]); // 输出: 100
// 检查元素是否存在
if (sortedList.ContainsKey("banana"))
{
Console.WriteLine("Banana is in the list."); // 输出: Banana is in the list.
}
}
}
③堆栈
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建一个整数类型的栈
Stack<int> stack = new Stack<int>();
// 向栈中压入元素
stack.Push(1);
stack.Push(2);
stack.Push(3);
stack.Push(4);
// 查看栈顶元素但不移除
Console.WriteLine("栈顶元素: " + stack.Peek()); // 输出: 4
// 移除并返回栈顶元素
int poppedElement = stack.Pop();
Console.WriteLine("Popped element: " + poppedElement); // 输出: 4
Console.WriteLine("栈顶元素: " + stack.Peek()); // 输出: 3
}
}
④队列
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 创建一个整数类型的队列
Queue<int> queue = new Queue<int>();
// 向队列中添加元素
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
// 查看并移除队列头部的元素
int dequeuedElement = queue.Dequeue();
Console.WriteLine("Dequeued element: " + dequeuedElement); // 输出: 1
Console.WriteLine("Queue head: " + queue.Peek()); // 输出: 2
}
}
52.C#泛型
53.C#多线程