一.基本元素
- 标记Token:对编译器有意义的符号
- 关键字Keyword
- 操作符Operator
- 标识符Identifier
- 允许“@”字符作为前缀以使关键字能够用作标识符
- 标点符号
- 文本(字面值)
- 注释与空白
- CTRL+K CTRL+C👉注释
- CTRL+K CTRL+U👉取消注释
- CTRL+K CTRL+D👉设置文档格式(自动对齐)
二.数据类型
值类型
- 结构体Structures
- 枚举Enumerations
- 只能从一个集合中选取有效值
引用类型
类Classes
接口Interfaces
委托Delegates
三.变量
👇从表面看,变量是用来存储数据的
int x;
x = 100;
实际上,变量表示了存储位置,并且每个变量都有一个类型,以决定什么样的值能够存入变量
👆了解为,x是一个标签,对应着内存中的一个地址,100这个值就存在该地址
变量 = 以变量名所对应的内存地址为起点、以其数据类型所要求的存储空间为长度的一块内存区域

引用变量存的是实例的地址
装箱和拆箱
//装箱
int x = 100;
object obj;
当发现obj引用的实例在堆上而不在栈上时,把该实例对应的值的内存大小在栈上找一块空间,再把这个地址存储回obj的内存空间
//拆箱
int y = (int)obj;
Console.WriteLine(y);
//100

四.方法
方法是类或结构体的成员
方法相当于自定义函数

👆复用,如果要更改3.14159为3.14或者Math.PI可以直接在GetCircleArea处改
实例方法👇
Calculator c = new Calculator();
c.Add(2.0,3.0);
class Calculator
{
public double Add(double a,double b);
}
静态方法
Calculator c = new Calculator();
//c.Add(2.0,3.0);此时这句话无用
class Calculator
{
public static double Add(double a,double b);
}
五.构造器
不带以0为默认参数的构造器
namespace ConstructExample
{
class Program
{
static void Main(string[]args)
{
Student stu = new Student;
Console.WriteLine(stu.ID);
Console.WriteLine(stu.Name);
}
}
class Student
{
//不带参数的构造体
public Student()
{
this.ID = 1;
this.Name = "No name";
}
//
public int ID;
public string Name;
}
}
//1
//No Name
强制程序员给构造器设置参数,在这种情况下如果不想设置参数但是要调用该方法,就需要自定义一个默认参数,如上图所示
namespace ConstructExample
{
class Program
{
static void Main(string[]args)
{
Student stu = new Student(1,"No name");//不能再写成new Student();
Console.WriteLine(stu.ID);
Console.WriteLine(stu.Name);
}
}
class Student
{
//不带参数的构造体
public Student(int initId,string initName)
{
this.ID = initId;
this.Name = initName;
}
//
public int ID;
public string Name;
}
}
构造器快捷键:ctor+tab*2ctor=Code snippet(小片段)
重载
class Calculator
{
//①
public double Add(int a, int b)
{
return a + b;
}
//②
public int Add(int a, int b)
{
return a + b;
}
③
public double Add(int a, int b, int c)
{
return a + b + c;
}
}
👆①与②不能共存,重载与方法的类型无关
①和③、②和③可共存