基本概念

类 (Class)

对象 (Object)

属性 (Properties)

方法 (Methods)

// 类
public class Person
{
// 字段
private string name;
private int age;

// 属性
public string Name
{
get { return name; }
set { name = value; }
}

public int Age
{
get { return age; }
set { age = value; }
}

// 方法
public void Display()
{
Console.WriteLine($"Name: {name}, Age: {age}");
}
}

在这个例子中,Person类有两个字段:name和age,它们分别用于存储人的姓名和年龄。这两个字段被声明为private,意味着它们只能在Person类内部被访问。

类还定义了两个属性:Name和Age,它们提供了对私有字段的公共访问。这是通过get和set访问器来实现的,它们分别用于获取和设置属性的值。

最后,类定义了一个Display方法,它用于在控制台上显示人的姓名和年龄。

事件 (Events)

在C#中,事件(Event)是一种使类或对象能够提供通知的机制。当类中发生某些特定的事情时,类可以触发事件,以通知其他类或对象。这是一种实现松散耦合的方式,因为触发事件的类不需要知道哪些类或对象会接收(或“监听”)该事件。
以下是如何在C#中声明、触发和监听事件的基本步骤:

  • 声明事件

在类中,你需要使用event关键字来声明一个事件。通常,事件是基于某个委托(Delegate)类型的,该委托定义了事件处理方法的签名。

public class MyEventClass
{
// 声明委托
public delegate void MyEventHandler(string message);

// 声明事件
public event MyEventHandler MyEvent;

// 触发事件的方法
protected virtual void OnMyEvent(string message)
{
MyEventHandler handler = MyEvent;
handler?.Invoke(message);
}
}

  • 触发事件

在类的某个方法中,你可以通过调用OnMyEvent方法来触发事件。这将调用所有已注册的事件处理程序。

public void DoSomething()
{
// 做一些事情...

// 然后触发事件
OnMyEvent("Something happened!");
}

  • 监听事件

在其他类或对象中,你可以监听MyEventClass类的事件。为此,你需要创建一个与事件委托签名相匹配的方法,并将该方法与事件相关联。

public class EventListener
{
public void ListenForEvent(MyEventClass myEventClass)
{
// 将事件处理程序与事件相关联
myEventClass.MyEvent += MyEventHandler;

// 现在,当myEventClass触发MyEvent时,MyEventHandler将被调用
}

private void MyEventHandler(string message)
{
Console.WriteLine($"Event received: {message}");
}
}
  • 使用

最后,你可以创建MyEventClass和EventListener的实例,并将它们连接起来。

MyEventClass myEventClass = new MyEventClass();
EventListener eventListener = new EventListener();

// 开始监听事件
eventListener.ListenForEvent(myEventClass);

// 触发事件
myEventClass.DoSomething();
// 输出:Event received: Something happened!

委托 (Delegates)

在C#中,委托(Delegate)是一种特殊的类型,它定义了方法的签名,使得可以将具有相同签名的方法作为参数传递,或者将方法赋值给变量。委托是事件和回调方法的基础,非常适用于实现回调函数、事件监听和异步编程等模式。

  • 委托的声明

委托的声明类似于方法的声明,但不包含方法体,且使用delegate关键字。例如:

public delegate void MyDelegate(string message);

这里声明了一个名为MyDelegate的委托,它定义了一个接受单个string类型参数并返回void的方法签名。

  • 委托的实例化

委托可以通过将具有相同签名的方法作为其构造函数的参数来实例化。例如:

public class MyClass
{
public static void MyMethod(string message)
{
Console.WriteLine(message);
}
}

// ...

MyDelegate myDelegate = new MyDelegate(MyClass.MyMethod);

这里,MyDelegate实例myDelegate被赋值为指向MyClass.MyMethod方法的引用。

  • 委托的调用

一旦委托被实例化并指向了一个或多个方法,它就可以像普通方法一样被调用。例如:

myDelegate("Hello, World!");

这将调用MyClass.MyMethod方法,并传递字符串”Hello, World!”作为参数。

  • 委托的多播

委托的一个强大功能是它们可以组合多个方法,形成多播委托(Multicast Delegate)。当多播委托被调用时,其包含的所有方法都将依次被调用。例如:

public class AnotherClass
{
public static void AnotherMethod(string message)
{
Console.WriteLine($"Another class says: {message}");
}
}

// ...

MyDelegate anotherDelegate = new MyDelegate(AnotherClass.AnotherMethod);
MyDelegate combinedDelegate = myDelegate + anotherDelegate;

combinedDelegate("Hello, Multicast!");

这将依次调用MyClass.MyMethod和AnotherClass.AnotherMethod,传递相同的字符串参数。

委托的用途
委托在C#编程中非常有用,特别是在以下场景中:

  • 实现事件和回调机制。
  • 将方法作为参数传递给其他方法。
  • 实现异步编程模式,如使用BeginInvoke和EndInvoke方法进行异步方法调用。
  • 在LINQ查询和表达式树中作为表达式的一部分。

    接口 (Interfaces)

数据类型

值类型 (Value Types)

整型 (int, long, short, etc.)

浮点型 (float, double)

字符型 (char)

布尔型 (bool)

引用类型 (Reference Types)

类 (Class)

接口 (Interface)

数组 (Array)

字符串 (String)

控制结构

条件语句 (if, else if, else)

循环 (for, foreach, while, do-while)

分支 (switch, case)

跳转 (break, continue)

面向对象编程 (OOP)

封装 (Encapsulation)

继承 (Inheritance)

多态 (Polymorphism)

异常处理

try-catch

finally

throw

集合与泛型

List

Dictionary<TKey, TValue>

其他集合类型…

文件与IO操作

文件读写

目录操作

路径操作

异步编程

async/await

Task

线程 (Thread)

网络编程

HTTP请求

Socket编程

其他网络操作

其他高级特性

LINQ

反射 (Reflection)

属性 (Attributes)

并发编程