Chapter 0 前言
Chapter 1 基础
1.1 简介
1.2 环境
1.3 程序结构
1.4 基本语法
1.5 数据类型
1.5.1 value types
1.5.2 Reference types
1.5.2.1 对象(Object)类型
1.5.2.2 动态(Dynamic)类型
1.5.2.3字符串(String)类型
1.5.3 Point types
1.5.4 类型转换
1.6 变量
1.7 常量
1.8 运算符
1.9判断
循环
封装
方法
可空类型
数组
Chapter 2 进阶
特性
反射
属性
索引器
委托
Chapter 0 前言
在学习Modbus时,采用C#写了一个client端,用以模拟TCP通信。设计界面时突然发现这与我之前在Android Studio上用Java写Android APP的过程极其相似。
这好比你学了PR后再去学LR的感觉是一样的,套路如此相似!
本文在参考菜鸟教程的基础上,进行了精简与相关问题解惑,仅供自己强化学习使用。
Chapter 1 基础
1.1 简介
C# 是由微软开发的一种面向对象的编程语言,是 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。
C#特点有:
现代的、通用的编程语言 | 面向对象 |
面向组件 | 容易学习 |
容易学习 | 结构化语言 |
产生高效率的程序 | 可以在多种计算机平台上编译 |
.Net 框架的一部分 | 强大的编程功能 |
C# 一些重要的功能:
布尔条件(Boolean Conditions) 自动垃圾回收(Automatic Garbage Collection) 标准库(Standard Library) 组件版本(Assembly Versioning) 属性(Properties)和事件(Events) 委托(Delegates)和事件管理(Events Management) 易于使用的泛型(Generics) 索引器(Indexers) 条件编译(Conditional Compilation) 简单的多线程(Multithreading) LINQ 和 Lambda 表达式 集成 Windows
1.2 环境
C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。
.Net 框架(.Net Framework)用于开发:
- Windows 应用程序
- Web 应用程序
- Web 服务
C# 开发使用的 IDE:
windows: visual studio 2019(我使用的)
Linux: Mono
当然Visual Web Developer之类的也是可以的。
1.3 程序结构
using System; //在程序中包含 System 命名空间,一个程序一般有多个using namespace HelloWorldApplication //namespace 声明,个 namespace 可以一系列的类 { class HelloWorld //一个类 { static void Main(string[] args) //类方法,main()方法是所有 C# 程序的 入口点。 { /* 我的第一个 C# 程序*/ Console.WriteLine("Hello World"); //定义在 System 命名空间中的 Console 类的一个方法 Console.ReadKey(); //等待按键 } } }
由此可知,一个 C# 程序主要包括以下部分:
1.命名空间声明(Namespace declaration)
2.一个 class
3.Class 方法
4.Class 属性
5.一个 Main 方法
6.语句(Statements)& 表达式(Expressions)
7.注释
注:代码文件以.cs保存,执行无误后会在obj文件夹下生成对应的exe可执行文件。
1.4 基本语法
using 关键字
在任何 C# 程序中的第一条语句都是:using System;
using 关键字用于在程序中包含命名空间。一个程序可以包含多个 using 语句。
class 关键字
class 关键字用于声明一个类。
C# 的注释
同C语言
成员变量
变量是类的属性或数据成员,用于存储数据。
成员函数
函数是一系列执行指定任务的语句。类的成员函数是在类内声明的。
标识符
标识符是用来识别类、变量、函数或任何其它用户定义的项目
类的命名必须遵循如下基本规则:
1.标识符必须以字母、下划线或 @ 开头,后面可以字母、数字、下划线、@。
2.标识符必须不包含任何嵌入的空格或符号。
3,标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
4.标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
5.不能与C#的类库名称相同。
这些与其他面向对象语言C++,JAVA相似。
关于关键字:
1、C#关键字:用来定义C#语言的字符串记号,它们是对编译器具有特殊意义的预定义保留标识符。
2、上下文关键字:仅在特定的语言结构中充当关键字的标识符。与关键字的不同在于上下文关键字可在其他部分代码中被用作标识符。它不是 C# 中的保留字。
1.5 数据类型
1.值类型(Value types) 2.引用类型(Reference types) 3.指针类型(Pointer types)
1.5.1 value types
值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。
1.5.2 Reference types
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。???这不是指针吗?戳我解惑。
换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。
1.5.2.1 对象(Object)类型
对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
object obj; obj = 100; // 这是装箱
1.5.2.2 动态(Dynamic)类型
可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
声明动态类型的语法:
dynamic <variable_name> = value;
如:
dynamic d = 20;
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。(是不是与解释型语言、编译型语言的区别有点类似?)
1.5.2.3字符串(String)类型
字符串(String)类型是 System.String 类的别名。它是从对象(Object)类型派生的。允许给变量分配任何字符串值。字符串(String)类型的值可以通过两种形式进行分配:引号和 @引号。
String str = "runoob.com";
一个 @引号字符串:
@"runoob.com";
C# string 字符串的前面可以加 @(称作"逐字字符串")将转义字符(\)当作普通字符对待,比如:
string str = @"C:\Windows";
等价于:
string str = "C:\\Windows";