基本概念
类 (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;
}
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();
|
委托 (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)
并发编程