本帖最后由 陽陽陽 于 2023-5-28 02:07 编辑
杂类:
快速命名方法:
光标点到方法那里,然后连续按两次Ctrl + R
正文:
1:多播(multicast)委托:
可以理解成把好几个子程序封装成一个,参数返回值必须一致
可以通过class实现不同参数
student stu1 = new student() {PenColor = ConsoleColor.Yellow};
然后再添加Action调用。
简单例子:
[C#] 纯文本查看 复制代码 private void button2_Click(object sender, EventArgs e)
{
Action<string, int> test = new Action<string, int>(tesActFu);
Action<string, int> test2 = new Action<string, int>(tesActFu);
test += test2;
test.Invoke("123",123);
}
public void tesActFu(string t1, int t2)
{
Console.WriteLine(t1);
Console.WriteLine(t2);
}
2:BeginInvoke方法:
理解成启动一个线程进行调用委托
[C#] 纯文本查看 复制代码 action1.BeginInvoke(null,null);
第一个参数是回调方法,暂时还没学。
New Bing例子:
[C#] 纯文本查看 复制代码
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
Action<string> action1 = new Action<string>(PrintMessage);
action1.BeginInvoke("Hello World!", new AsyncCallback(CallBackMethod), null);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
static void PrintMessage(string message)
{
Console.WriteLine(message);
}
static void CallBackMethod(IAsyncResult ar)
{
Console.WriteLine("Asynchronous operation completed.");
}
}
3:线程:
[C#] 纯文本查看 复制代码 using System.Threading;
Student stu1 = new Student() {ID = 1, PenColor = ConsoleColor.Yellow};
Thread Thread1 = new Thread(new ThreadStart(stu1.DoHomework));
4:Task:
[C#] 纯文本查看 复制代码 using System.Threading.Tasks;
Student stu1 = new Student() {ID = 1, PenColor = ConsoleColor.Yellow};
Task task1 = new Task(new Action(stu1.DoHomework));
5:接口:
Java用接口完全替代了指针,而C#既有指针(委托)也有接口。
拒绝思考。
[C#] 纯文本查看 复制代码 interface IProductFactory{
Product Make();
}
class PizzaFactory: IProductFactory{
public Product Make(){
你的方法();
}
}
IProductFactory pizzaFac = new PizzaFactory();
// IProductFactory toyFac = new ToyFactory();
6:事件:
直接易语言搬过来理解
7:事件参数:
C#比较灵活,好多按钮可以挂接一个事件,然后通过参数判断是哪个按钮触发的事件。
[C#] 纯文本查看 复制代码 private void button2_Click(object sender, EventArgs e)
{
Action<string, int> test = new Action<string, int>(tesActFu);
Action<string, int> test2 = new Action<string, int>(tesActFu);
test += test2;
test.Invoke("123",123);
}
object sender 这个参数 sender可以看做是 this.button1 类型的
e参数没讲,网上的实在是难懂,求个理解方法。
8:参数手动挂接 - 方法1:
[C#] 纯文本查看 复制代码 private void Form1_Load(object sender, EventArgs e)
{
//button2.Click += Button2_ClickTest;
//Func<int> testFunc = new Func<int>(testThread);
//AsyncCallback testCallBack_AC = new AsyncCallback(testCallBack);
//testFunc.BeginInvoke(testCallBack_AC, null);
//Calculator ACalculator = new Calculator();
//Calc calc1 = new Calc(ACalculator.Add);
//ProductFactory TheproductFactory = new ProductFactory();
//WarpFactroy ThewarpFactroy = new WarpFactroy();
//Func<Product> fun1 = new Func<Product>(TheproductFactory.MakePizza);
//Func<Product> fun2 = new Func<Product>(TheproductFactory.MakeToyCar);
//Box box1 = ThewarpFactroy.WarpPoroduct(fun1);
//Box box2 = ThewarpFactroy.WarpPoroduct(fun2);
//Console.WriteLine(box1.Product.Name);
//Console.WriteLine(box2.Product.Name);
//Action<string, int> testAct = tesActFu;
//testAct.Invoke("qqq", 22);
button2.Click += testClick;
}
private void testClick(object sender, EventArgs e)
{
Console.WriteLine("qwertyuiop");
}
也可以这样写:
[C#] 纯文本查看 复制代码 this.button2.Click += new EventHandler(testClick);
9:参数手动挂接 - 方法2 - 匿名方法:
[C#] 纯文本查看 复制代码 this.button2.Click += delegate (object sender, EventArgs e)
{
// do something here...
}
非常少见,已经过时
9:参数手动挂接 - 方法3 - Lambda 表达式:
[C#] 纯文本查看 复制代码 this.button2.Click += (object sender_, EventArgs e_) => {
// do something here
};
如果挂接在一个事件下,不要和事件参数重名。
10:WPF:
基本和C#一样,没怎么讲。
大佬帮忙改改错,万分感谢。
|