1:用async和await关键字修饰异步方法
注:写错了一个点Program是程序的入口类
using System;
using System.Threading.Tasks;//引用命名空间
public class Program//public class Program 定义了一个公共类 Program,这是 C# 程序的典型入口类。
{
public static async Task Main()//main方法是程序入口点,async Task代表是异步方法
{
Console.WriteLine("Main method starts.");//打印main方法启动了
int result = await GetNumberAsnyc();//await 等待异步方法完成,调用GetNumberAsnyc异步方法
Console.WriteLine("Result:"+result);
Console.WriteLine("Main method ends.");
}//打印完结果后main方法结束
public static async Task<int> GetNumberAsnyc()//定义了一个返回类型是 Task<int>的异步方法GetNumberAsnyc
{
Console.WriteLine("GetNumberAsync starts.");
await Task.Delay(2000);//模拟异步操作等待两秒,Task.Delay 是一个会返回 Task 的异步方法,用于表示非阻塞延迟。
return 42;
}
}
2:事件和委托

using System;
public class EventPublisher//定义公共类它是事件的发布者
{
public event EventHandler MyEvent;//定义公共事件MyEvent类型为 EventHandler
public void DoSomething()//公共方法
{
Console.WriteLine("Doing something...");//正在打印某个操作
OnMyEvent("Event triggered!");// *调用了受保护的虚拟方法OnMyEvent,将字符串 "Event triggered!" 作为消息传递
}
protected virtual void OnMyEvent(string message)//定义受保护的虚拟方法OnMyEvent
{
MyEvent?.Invoke(this, new EventArgs { Message = message });//触发事件是MyEvent
}
}
public class EventSubscriber//公共方法MyEvent事件的处理程序
{
public void Subscribe(EventPublisher publisher)
{
publisher.MyEvent += HandleEvent;
}
public void Unsubscribe(EventPublisher publisher)
{
publisher.MyEvent -= HandleEvent;
}
public void HandleEvent(object sender, System.EventArgs e)
{
var customEventArgs = e as EventArgs;
if (customEventArgs != null)
{
Console.WriteLine($"Event handled: {customEventArgs.Message}");
}
}
}
public class Program
{
public static void Main()
{
EventPublisher publisher = new EventPublisher();
EventSubscriber subscriber = new EventSubscriber();
subscriber.Subscribe(publisher);
publisher.DoSomething(); // 触发事件
subscriber.Unsubscribe(publisher);
publisher.DoSomething(); // 不再触发事件
}
}
public class EventArgs : System.EventArgs
{
public string Message { get; set; }
}
3:密封类(sealed)的用法

using System;
public sealed class MyClass//定义类是密封类
{
public void Display()
{
Console.WriteLine("This is a sealed class");
}
}
public class Program//程序入口类
{
public static void Main()//程序入口点
{
MyClass obj = new MyClass();
obj.Display();
}
}
4:结构体(struct)和类(class)的区别

using System;
public struct point//定义结构体(值类型当它被赋值或传递时,会创建一个值的副本,而不是引用。)
{
public int x{get;set;}
public int y{get;set;}//创建两个公有属性
public point(int x,int y)
{
this.x=x;
this.y=y;//使用 this 关键字明确指出要赋值给结构体的字段而不是参数。
}//不添加this的话会无法初始化成功p1会变成(0,0)
public void Display()
{
Console.WriteLine($"point:({x},{y})");
}
}
public class Program
{
public static void Main()
{
point p1 = new point(1,2);//创建了一个 point 类型的变量 p1,并使用构造函数 new point(1, 2) 初始化它
point p2 = p1;//值拷贝修改 p2 的值不会影响 p1,反之亦然
p2.x=10;
p1.Display();
p2.Display();
}
}
5:接口

using System;
public interface IAnimal
{
void Makesound();
}
public class Dog:IAnimal
{
public void Makesound()
{
Console.WriteLine("Dog barks");
}
}
public class Cat:IAnimal
{
public void Makesound()
{
Console.WriteLine("Cat meows");
}
}
public class Program
{
public static void Main()
{
IAnimal myDog =new Dog();
IAnimal myCat =new Cat();
myDog.Makesound();
myCat.Makesound();
}
}
-
接口 (
IAnimal)-
定义了一个“契约”,规定实现该接口的类必须提供某种行为。
-
IAnimal接口要求实现类必须提供一个Makesound方法。
-
-
多态性
-
myDog和myCat是IAnimal类型的变量,但分别引用了Dog和Cat的实例。 -
尽管变量类型是
IAnimal,但调用Makesound方法时,会根据实际对象类型调用相应的方法(Dog或Cat的实现)。
-
-
封装
-
Dog和Cat类分别封装了它们的行为(Makesound方法),并通过IAnimal接口暴露给外部使用。
-
17万+

被折叠的 条评论
为什么被折叠?



