系列文章目录
前言
前面一篇文章主要简单的介绍了C#语法结构以及基础语句,这里来记录下C#对比Java基础不同的部分,结构体,委托,事件等概念…
一、结构体
先看结构体的例子
struct People
{
public string name;
public int sex;
public string nickName;
};
定义为:C#的结构体类型(或称为结构)是用户自定义类型的一种, 它为用户将实际应用中数据类型不同,但互相联系的数据看作 一个整体提供了类型支持<
1.特点
- 定义结构体是需要显式的声明
public
限定符的,没有声明的就不能被访问到 struct
定义结构体是一种声明,并没有分配对应的存储空间
当然根据提示,C#10以上是可以的,但同样也需要显式声明构造函数- 结构体成员有大致有两类:1.基础数据 2.结构体成员(套娃,但不能套自己)
- 结构是密封的、不能继承的
2.初始化
在定义结构体变量(或者说是实例化结构体)时,系统会根据结构体类型的定义为其分配相应的存储空间,此时就可以对结构体中的成员进行赋值,访问等操作了
-
结构体是默认实现无参构造的,不需要也不能重新定义的
-
定义有参构造时,需要将所有字段都进行初始化
public struct People//结构体类型名
{
public string name;
public int age;
public People(string name,int age)
{
this.name = name;
this.age = age;
}
}
- 静态构造函数
- 不能有参数
- 不能有访问修饰符
它会在使用带参构造函数进行初始化时被自动调用或访问静态数据成员时调用
并且只会被调用一次
3.结构体的应用
这里展示下结构体基本应用
struct People
{
public string name;
public int age;
public string nickName;
public People(string name,int age, string nickName)
{
this.name = name;
this.age = age;
this.nickName = nickName;
}
static People()
{
Console.WriteLine("静态构造被调用");
}
};
static void Main(string[] args)
{
People people = new People("张三", 45, "法外狂徒");
Console.WriteLine(people.name);
}
二、委托
1.概念
定义:C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate
类
通俗点就是,代理,中介,让它帮我们执行一系列操作
2.委托的定义及实例化使用
修饰符 delegate 返回值类型 委托名 ( 参数列表 );
代码如下(示例):
public delegate void MyDelegate();
是不是感觉和方法类似,确实如此,现在来看委托的实例化使用
class Program
{
public delegate void MyDelegate();
static void Main(string[] args)
{
MyDelegate myDelegate = new MyDelegate(Test.Hello);
myDelegate();
}
}
class Test
{
public static void Hello()
{
Console.WriteLine("Hello World!");
}
}
向委托中注册方法
class Program
{
public delegate void StudentDelegate();
static void Main(string[] args)
{
//实例化委托
StudentDelegate studentDelegate = new StudentDelegate(Student.SetMealOne);
//向委托中注册方法
studentDelegate += Student.SetMealTwo;
studentDelegate += Student.SetMealThree;
//调用委托
orderDelegate();
}
}
class Student
{
public static void SetMealOne()
{
Console.WriteLine("购买套餐1!");
}
public static void SetMealTwo()
{
Console.WriteLine("购买套餐2!");
}
public static void SetMealThree()
{
Console.WriteLine("购买套餐3!");
}
}
+=
是注册方法,-=
是撤销方法,注意需要在未调用委托前,撤销
studentDelegate -= Student.SetMealThree;
对于委托的理解,我还是比较浅显,还是需要多多练习,经常使用才会有更深入,深刻的理解…
三,事件初步
1.概念
事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件,例如,中断…
C# 中使用事件机制实现线程间的通信
以上是菜鸟教程的一段描述,我个人表示不完全理解,还是需要后续的感受才能明白
2.声明事件
在一个类中声明事件,首先要声明该事件的委托类型,这里可以看出,委托和事件的关系了,事件时基于委托的
至于为什么?引用该文章中一段话C#事件–全网最全+全网最易理解
- 事件需要用委托类型来做一个约束,这个约束既规定了事件能发送什么消息给响应者,也规定了响应者能收到什么样的事件消息,这就决定了事件响应者的事件处理器必须能够给这个约束匹配上,才能够订阅这个事件。
- 当事件的响应者给事件的拥有者提供了能够匹配这个事件的事件处理器之后,得找个地方把事件处理器保存或者记录下来,能够记录或者引用方法的任务也只有委托类型的实例能够做到。
public delegate void BoilerLogHandler(string status);
// 基于上面的委托定义事件
public event BoilerLogHandler BoilerEventLog;
3.委托与事件的具体应用
未完待续…