C#基础(Day08)
今天学的主要是委托,事件,和一些类还有接口。
先来看委托,首先要说委托是一种类型,它可以把方法包装成一个类型进行传递。委托在引用方法时只要方法的签名与委托签名相匹配就行了,它并不认修饰符。
委托类型派生自.NET Frameword中的Delegate类。委托类型是密封的。
namespace 委托
{
class Program
{
static void Main(string[] args)
{
Greeting gt = new Greeting();
gt.MD+= gt.English;
gt.GreetPeopre("tom");
gt.MD -= gt.English;
gt.MD += gt.Chinese;
gt.GreetPeopre("张三");
Console.ReadLine();
}
}
class Greeting
{
public MyDelegate MD;
public void GreetPeopre(string name)
{
MD(name);
}
public void English(string name)
{
Console.WriteLine("Hello,"+name);
}
public void Chinese(string name)
{
Console.WriteLine("早上好,"+name);
}
}
public delegate void MyDelegate(string s);
}
委托中还有两个名词:委托的协变,委托的逆变。
委托的协变是允许方法的返回类型要比委托的返回类型范围小。因为传递返回值时,是将方法的返回值传递给委托,所以委托的返回值类型表示的范围要比方法的类型要广,以接收方法传递过来的返回值。
委托的逆变:它是允许方法的参数类型比委托的参数表示的范围要大。因为在参数传递时,是通过委托将参数传递给方法,为了接收从委托传递过来的参数,方法的参数类型表示的范围要比委托的广。
其实协逆变都是把子类型赋值于父类型的过程。协变时委托的返回值类型是父类型,逆变时委托的返回值类型是子类型。
说到了委托就不得不说说事件了。其实声明一个事件不过类似于声明一个进行了封装的委托类型的变量而已。
定义事件可以分为五步:
1.定义委托
2.定义事件
3.定义方法
4.事件订阅方法
5.调用事件
class Program
{
static void Main(string[] args)
{
Program p = new Program();
//事件订阅方法
p.MyEve+=new MyDel(MyMethod);
//调用事件
p.MyEve();
}
//定义方法
static void MyMethod()
{
Console.WriteLine("我的方法");
}
//定义事件
event MyDel MyEve;
}
//定义委托
delegate void MyDel();
看完了委托和事件,我们再来说说几个类。
密封类:密封类不能用做基类,但它可以继承其它类(但它不可以继承静态类),关键字sealed
静态类:静态类既不可以被继承,也不可以继承其它类。所以静态方法可以被重载,但不能被重写。静态类中仅包含静态成员,因此它们不能被实例化。在这里,说一下代理不可以是静态的,但事件可以是静态的。关键字static
抽象类:与静态类相同,抽象类也不能实例化。抽象类中既可以有抽象成员也可以有非抽象成员。当有实例化类继承它时,子类必须通过override实现抽象类中的抽象成员。事件,方法,属性,索引器都可以是抽象的。关键字abstract。
最后有接口,接口好像也没什么说的,总结来说,接口中的所有成员都不能有实现,接口也不能直接实例化,接口中可以包含事件,属性,方法,索引器,接口不能继承类,只能继承接口。接口是可以多继承的,这点与类不同
转载于:https://blog.51cto.com/kxvivian/620494
C#基础(Day08)相关推荐
- Python基础day08 作业解析【7道 面向对象题目】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] Python基础day08[面向对象(类.对象.属性).魔方方法(init.str.del.rep ...
- Python基础day08【面向对象(类、对象、属性)、魔方方法(init、str、del、repr)】
视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员] 目录 0.复习 1.类外部添加和获取对象属性 2.类内部操作属性 3.魔法方法 3.1.__i ...
- 小汤学编程之JAVA基础day08——面向对象(三):抽象类与接口
一.抽象类 1.抽象类的由来 2.几点注意 3.语法规则 二.接口 1.定义方式 2.属性和方法 三.总结 一.抽象类 1.抽象类的由来 "用进废退", ...
- Java基础 DAY08
成员方法传参机制 parameter 参数 基本数据类型的传参机制 public class MethodParameter01 { //编写一个main方法public static void ma ...
- python基础day-08:字符串
文章目录 字符串 一.什么是字符串 二.字符 2.1 普通字符 2.2 转义字符 2.2.1 常见转义 2.2.2 字符编码 ASCII Unicode chr(编码值) ord(字符) 三.获取字符 ...
- 超全面Python基础入门教程【十天课程】博客笔记汇总表
目录 1.学习地址 2.下载地址[视频.源码.课件.软件] 3.详细博客笔记 Day 01 Day 02 Day 03 Day 04 Day 05 Day 06 Day 07 Day 08 Day 0 ...
- 下拉列表框Spinner
layout文件 item.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLay ...
- python 100days github_GitHub - songhp/Python-100-Days: Python - 100天从新手到大师
Python教学大纲 Python应用领域和就业形势分析 简单的说,Python是一个"优雅"."明确"."简单"的编程语言. 学习曲线低, ...
- Day08 - 面向对象编程基础
面向对象编程基础 活在当下的程序员应该都听过"面向对象编程"一词,也经常有人问能不能用一句话解释下什么是"面向对象编程",我们先来看看比较正式的说法. 把一组数 ...
- python学习基础篇Day08(P85~~95)
b站达内python课学习笔记 P85 Python基础-8.1 课程内容回顾 一.day07复习 """day07 复习能力提升for for# 结论:外层循环执行一次 ...
最新文章
- php static 和 global,php中global static和$GLOBALS使用与区别
- 水壶问题 算法导论8.4
- OSChina 周六乱弹 —— 买楼出一块钱,你们出么?
- centos连接jupyter方法并安装jupytext插件
- 51nod 1562 玻璃切割 (STL map+一点点的思考)
- 计算机科学基本理论,计算机科学的基础知识.ppt
- 全排列算法解析(视频+详解+代码+STL)
- Activating Browser Modes with Doctype
- JS-内置对象-Boolean-Number-String-Math-Date-Array
- 巴菲特发布2022年致股东公开信:盛赞苹果CEO
- linux内核驱动之 设备和模块的分类
- iec104点号_IEC104规约详细讲解全解.ppt
- Android开发 - 掌握ConstraintLayout(一)传统布局的问题 1
- 【转】@JsonAlias和@JsonProperty注解使用详解
- MySQL中的LIMIT 关键字
- Spring文件中的xsd文件
- ctfmon是什么启动项_win7启动项没有ctfmon.exe的解决方法
- 用RePKG解包.pkg文件【Wallpaper Engine】
- java ean13_【求大神指导】java实现EAN13条形码识别
- 使用 Let's Encrypt 的免费HTTPS服务