一、数据类型
C#作为一种强类型语言,有着很多数据类型关键字。
1. int
int是C#中最常用的整型数据类型,占用四个字节,可存储-2^31到2^31-1之间的整数。
int num = 456;
Console.WriteLine(num); //输出456
2. float
float是单精度浮点型数据类型,占用四个字节,可存储6到9位小数。
float f = 3.14f;
Console.WriteLine(f); //输出3.14
3. double
double是双精度浮点型数据类型,占用八个字节,可存储15到17位小数。
double d = 3.1415926;
Console.WriteLine(d); //输出3.1415926
4. bool
bool是布尔型数据类型,用于存储True或False的值。
bool isTrue = true;
Console.WriteLine(isTrue); //输出True
5. char
char是字符型数据类型,占用两个字节,用于存储单个字符。
char c = 'A';
Console.WriteLine(c); //输出A
二、流程控制
C#中的流程控制关键字可以帮助我们控制程序的执行流程。
1. if
if用于表示条件语句,如果条件成立则执行相应的语句。
int num = 20;
if(num > 10)
{
Console.WriteLine("num大于10");
}
2. switch
switch用于表示多重条件语句,根据不同条件执行不同的语句。
int num = 3;
switch(num)
{
case 1:
Console.WriteLine("num等于1");
break;
case 2:
Console.WriteLine("num等于2");
break;
default:
Console.WriteLine("num不等于1或2");
break;
}
3. for
for用于表示循环语句,循环执行指定次数的语句。
for(int i = 0; i < 5; i++)
{
Console.WriteLine("i的值为:" + i);
}
4. while
while也用于表示循环语句,循环执行直到条件不成立。
int i = 0;
while(i < 5)
{
Console.WriteLine("i的值为:" + i);
i++;
}
5. break
break用于跳出循环语句。
for(int i = 0; i < 5; i++)
{
if(i == 3)
{
break;
}
Console.WriteLine("i的值为:" + i);
}
三、类和对象
C#是一种面向对象的语言,类和对象是C#的核心之一。
1. class
class用于定义类。
public class Person
{
public string name;
public int age;
public void SayHello()
{
Console.WriteLine("我叫" + name + ",今年" + age + "岁。");
}
}
2. object
object是C#中所有类的基类。
Person p = new Person();
object o = p;
Console.WriteLine(o.GetType()); //输出Person
3. new
new用于实例化一个对象。
Person p = new Person();
p.name = "张三";
p.age = 18;
p.SayHello(); //输出“我叫张三,今年18岁。”
4. this
this代表当前对象。
public class Person
{
public string name;
public int age;
public void SayHello()
{
Console.WriteLine("我叫" + this.name + ",今年" + this.age + "岁。");
}
}
5. public/private
public和private用于表示访问权限。
public class Person
{
public string name; //公开属性,外部可访问
private int age; //私有属性,只有内部可访问
public void SetAge(int age)
{
if(age >= 0)
{
this.age = age;
}
}
public void SayHello()
{
Console.WriteLine("我叫" + name + ",今年" + age + "岁。");
}
}
四、异常处理
异常处理是保证程序安全和稳定的重要手段。
1. try
try用于表示异常尝试语句。
try
{
int a = 10;
int b = 0;
int c = a / b;
}
catch(Exception ex)
{
Console.WriteLine(ex.Message); //输出“除数不能为零。”
}
2. catch
catch用于捕获异常,指定异常类型。
try
{
// ...
}
catch(DivideByZeroException ex)
{
Console.WriteLine("除数不能为零。");
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
3. finally
finally用于表示异常处理结束后必须执行的语句。
try
{
// ...
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.WriteLine("异常处理完毕。");
}
4. throw
throw用于手动抛出异常。
public int Divide(int a, int b)
{
if(b == 0)
{
throw new Exception("除数不能为零。");
}
return a / b;
}
5. using
using用于自动释放资源。
using(StreamWriter writer = new StreamWriter("test.txt"))
{
writer.WriteLine("hello, world");
}
五、多线程
多线程是C#中的一个核心概念。
1. Thread
Thread用于定义和控制线程。
void PrintNumbers()
{
for(int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
Thread.Sleep(100);
}
}
Thread t = new Thread(new ThreadStart(PrintNumbers));
t.Start();
2. lock
lock用于多线程同步访问,防止多个线程同时修改同一数据。
class Counter
{
private int count = 0;
private object lockObject = new object();
public void Increment()
{
lock(lockObject)
{
count++;
}
}
public void Decrement()
{
lock(lockObject)
{
count--;
}
}
}
3. Monitor
Monitor用于多线程同步访问,与lock类似。
class Counter
{
private int count = 0;
public void Increment()
{
Monitor.Enter(this);
count++;
Monitor.Exit(this);
}
public void Decrement()
{
Monitor.Enter(this);
count--;
Monitor.Exit(this);
}
}
4. ThreadPool
ThreadPool用于管理线程池。
void PrintNumbers(object state)
{
for(int i = 0; i < 10; i++)
{
Console.WriteLine(i);
Thread.Sleep(100);
}
}
ThreadPool.QueueUserWorkItem(new WaitCallback(PrintNumbers));
5. Async/Await
Async/Await用于异步编程,避免因为长时间的计算或IO操作造成程序阻塞。
async Task
DownloadFileAsync(Uri address)
{
using(var client = new WebClient())
{
return await client.DownloadStringTaskAsync(address);
}
}
六、其他关键字
1. const
const用于定义一个常量。
const int MaxAmount = 100;
2. sizeof
sizeof用于获取数据类型的大小。
int a = sizeof(int); //a的值为4
3. typeof
typeof用于获取对象的类型。
Person p = new Person();
Type t = typeof(Person);
Console.WriteLine(t.FullName); //输出Person
4. is
is用于判断对象是否是指定类型的实例。
Person p = new Person();
if(p is Person)
{
Console.WriteLine("p是Person的实例。");
}
5. var
var用于自动推断变量类型。
var num = 123; //num的类型为int