c# 入门知识点

流程控制

顺序

  • 普通代码

分支

  • if else
  • switch case
    • break:可以跳出switch-case循环,或跳出当前循环配合if使用
    • case:后面的值必须是常量,不能是变量,且任何两个case的值不能相同
    • default:可有可无,若有则只有一个

循环

  • for
  • foreach
    • 注意:在foreach循环中不要对集合进行addremove操作,会引起异常
  • do while
  • while

return

  • 将控制返回到出现return语句函数成员的调用地方,结束当前方法
    • 不带表达式的return语句只能用在不计算值的函数成员中,如void方法等
    • 带表达式的return只能用在计算值的函数成员中,必须存在一个隐式转换,使得表达式兼容于函数的返回类型

运算符

算术运算符

  • + - * / %

关系运算符

  • < > <= >= == !=

赋值运算符

  • = += -= *= /= %=

自运算符

  • ++ --(分前置和后置)

成员访问运算符

  • . []

逻辑运算符

  • ! && ||

运算符重载

  • operator

语言特点

  1. C#是托管语言
  2. 编译为中间语言IL,执行时通过JIT将需要的模块临时编译为本地代码
  3. 内存管理:采用GAC垃圾回收机制
  4. 字符串是基本数据类型,比C++对字符串的处理简单
  5. 库:C#依赖于.NET类库

C#常用对象

隐式类型 Var

  • 不会影响性能
  • 声明时必须赋值

匿名类型 Anonymous Type

  • 提供一种方便的方法,将一组只读属性封装到单个对象中
  • 类型名由编译器生成,不能在源代码级使用
  • 每个属性的类型由编译器推断
  • 在网站开发中,序列化和反序列化JSON对象时很有用

特点

  • 不用声明参数
  • 方法体内也不用声明字段或方法类型
  • 示例: var obj = new {myTitle = "文字", myOtherParam = new int[] {1,2,3,4}};

object三个可以重写的方法

  1. Equals(object obj)
  2. GetHashCode()
  3. ToString()

值类型 Value

特点

  1. 存储在内存的栈中
  2. 栈的执行效率要比堆的执行效率高

结构 struct

  1. 初始化使用 new 操作符,但对象分配在栈上
  2. 不能被继承,是 sealed
  3. 没有构造函数,但可以添加构造函数
  4. 没有析构函数
  5. 没有 abstractsealed(因为不能继承)
  6. 默认是 public 修饰,成员默认是 private 修饰
  7. 可以不使用 new 初始化
  8. 在结构中初始化实例字段是错误的
  9. 隐式地从类型 system.ValueType 继承,system.ValueType 继承于 system.Object

基本数据类型

  • int
  • double
  • bool
  • char
  • decimal

枚举 enum

  • 每个枚举类型都有一个相应的整型类型,称为基础类型(underlying type)
  • 没有显式声明基础类型时,默认为 int
  • 默认继承自 System.EnumSystem.Enum 继承于 system.ValueType

引用类型 Reference

  1. 存储在内存的堆中
  2. stringchar 的数组

string 方法

  • ToString(): object 对象的方法
  • ToCharArray(): 返回 char 类型的数组
  • StartsWith
  • EndsWith
  • Trim(): 移除前后空格
  • TrimStart() / TrimEnd()
  • String.Join(): 添加字符串形成新字符串的方法
  • Contains()
  • StringBuilder: 不断连接字符串,不重新生成字符串

string 特点

  • 不变性
  • 读共享,写复制
  • 字符串驻留技术

数组

  • 长度不变,类型单一
  • 一维数组
  • 多维数组 (int[,])
  • 交错数组 (int[][])

集合

  • List: 泛型,任意类型,变长的
  • array: 定长的
  • ArrayList: 变长的

定义

  • 将相同的属性和方法的对象封装,抽象出“类”

字段

  1. 用下划线小写开头:_name
  2. NULL 不占内存空间
  3. 私有的,必须的,用 private 修饰
  4. 静态字段只标识一个存储位置,无论创建多少个实例,永远只有一个副本
  5. 初始化时在构造函数里完成

属性

  1. 保护字段
  2. 属性赋值,执行 set 方法
  3. 属性取值,执行 get 方法
  4. public 修饰

方法

  • 签名(signature)由方法的名称、类型参数的数目、方法参数的数目、修饰符、类型组成

NEW 实例化

  1. 开辟内存空间
  2. 创建内存对象
  3. 调用构造函数
  4. 隐藏从父类中继承的同名成员

静态类

  1. 只能包括静态成员
  2. 无法实例化,只能做工具使用
  3. 在项目中资源共享
  4. 本身是占内存的
  5. 静态函数只能访问静态成员,不能访问实例成员
  6. 静态类是密封的
  7. 不包含实例构造函数
  8. 一个类只能有一个静态构造函数

构造函数

  1. 名称同类名
  2. 没有返回值,不能用 void
  3. 必须用 public 修饰符
  4. 创建对象时执行,可以重载
  5. 通过 this 重载本类的构造函数

常用类

  1. Stopwatch
  2. Path
  3. File
  4. FileInfo
  5. FileStream
  6. BinaryFormatter
  7. DirectoryInfo

修饰符

  • private
  • protected
  • public
  • internal
  • internal protected

其他

  • partial: 部分类
  • sealed: 密封类
  • readonly: 只读字段
  • abstract: 抽象类
  • interface: 接口

装/拆箱

  • 装箱:值类型 -> 引用类型
  • 拆箱:引用类型 -> 值类型

特点

  • 类型系统的基类是 Object

书籍推荐

  1. WCF技术内幕
  2. WCF服务编程
  3. ASP.NET MVC4 web编程

小知识

命名空间

  • 解决类的重名问题,可看作类文件夹

GAC(Garbage Collection)

  1. Garbage Collection
  2. 只能在程序结束后,才会释放资源
  3. 自动回收不再使用的对象所占用的内存

异常处理(exception handling)

  • 提供了结构化和可扩展的错误检测和恢复方法
    • throw new Exception("大家来看啊,这里有一个异常啊");

类型安全(type-safe)

  • 避免了读取未初始化的变量、数组索引超出边界或执行未经检查的类型强制转换等情形。

编码

  • ASCII128 America
  • ASCII256 Europe
  • GB2312 CHINA
  • Big5 HK.TW
  • Unicode 解析慢
  • UTF-8 web编码格式

内存

  1. 静态存储区

类型转换

  • Convert.ToInt32
  • int.Parse
  • int.TryParse

常量

编译时常量

  • const 数据类型 常量名=值
    • 作为类成员时,总是作为static成员出现,不允许加static关键字
    • 必须在编译时确定下来,只支持一些基本类型

运行时常量

  • readonly 数据类型 常量名=值
    • 可以弥补编译时常量不能定义复杂数据类型的缺点

进程

  • 计算机上的一次执行活动,分为系统进程和用户进程

线程

  • 线程和进程的区别:子进程和父进程有相同的代码段,不同的数据段,而多个线程则共享数据段
    • 每个线程有自己的执行堆栈和程序计数器

特点

  1. 使程序能够执行并发处理
  2. .NET system Threading命名空间封装了线程类库
  3. 线程共享应用程序的资源

辅助线程

  • 可以与主线程一起并行执行代码

方法

  • Sleep
  • Interrupt
  • Abort

线程池ThreadPool

  • 多用于服务器应用程序

前后台线程区别

  1. 一旦所有前台线程在托管进程中被停止,系统将停止所有后台线程并终止程序运行
  2. 使用Thread.IsBackground属性判断是后台线程还是前台线程,或更改其状态

多线程

  1. 目标是解决高并发的吞吐量和响应性问题
  2. 资源共享问题,如死锁和争用
  3. 多线程特别适用于不同资源的任务

线程同步

  • Mutex
  • Monitor
  • Interlocked
  • AutoResetEvent
  • ManualResetEvent

安全

  1. 多线程同时访问相同资源,将产生不可预知的数据破坏
  2. 对于整数类型的简单操作,可以用Interlocked类的成员来实现线程同步

PE (Portable Executable)

  • Windows PE
  • .NET PE
    • IL
    • MetaData
    • JIT编译IL为二进制机器码,然后解释执行,可能缓存二进制数据

CLR (Common Language Runtime)

  • 类似java虚拟机
  • 负责托管代码的解释、执行
  • 负责资源管理(内存分配、垃圾收集)
  • 保证应用程序和底层操作系统之间必要的分离

CLS (Common Language Specification)

  • 规定所有.NET语言都应遵循的规则和约束
  • 生成可与其他不同语言互操作的应用程序

CTS (Common Type System)

  • 包含标准数据类型
  • 包含操作准则集

CLR Host托管程序类型

  1. 任意的.NET托管程序
  2. 控制台、Winform、WPF、WCF、WF
  3. IE
  4. ASP.NET
  5. shell可执行文件

CLR加载器

  • 管理应用程序域

JIT (Just in Time)

  • 在CLR的作用下,通过JIT形成二进制机器代码

Ngen

  • 在应用程序运行之前,而不是在应用程序运行过程中执行从MSIL到本地代码的转换

IL (Intermediate Language)

  • 由一组特定的指令组成,指明如何执行代码

.NET编译执行步骤

  1. 选择编译器
  2. 生成MSIL代码
  3. JIT动态编译为本机代码
  4. CLR运行代码

组件

  • COFF (Common Object File Format)
  • 元数据Metadata

程序集assembly

  • 托管模块,以及资源文件的逻辑组合

全局程序集Global Assembly Cache

  • 将程序集放在全局程序集缓存中,可以在多个应用程序之间共享程序集

加载与卸载

  • 程序集仅在需要时才加载到内存中

命名空间

  • using jj = system.ling.expressions; 命名空间的别名

预处理指令

  • #pragma warning disable xxxx 禁用所有警告信息
  • pragma warning restore xxxx 启用所有警告信息

WinForm

  • 客户端 B/S 架构软件

控件

  1. TextBox
  2. ScrollBars
  3. Label
  4. Timer
  5. Radio
  6. Checkedbox
  7. WebBrowser
  8. ComboBox
  9. Control

对象

  1. Process
  2. Socket
  • 套接字:用于描述IP和端口号

网络协议

  • TCP:安全、稳定、效率低
  • UDP:快速、高效、不稳定,易丢包

网络类

  • IPAddress类
  • IPEndPoint类

作者:spike

分类: Net

创作时间:2024-04-25

更新时间:2024-04-25

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1
Copyright © Your Website 2024
介绍 赞助 Github Rss Sitemap 免责声明 联系