基础补充(扩展方法/协变/访问修饰/接口/生命周期)



项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、扩展方法(Extension Methods)

1.1 创建扩展方法

  • 全部使用static
  • 需要扩展的语法:this + 被扩展类型 + 参数

在这里插入图片描述

1.2 案例

  • 最常用的案例就是:给类库添加依赖注入
  • The most common use case involves adding dependency injection to a library.
  • The most typical example is adding dependency injection to a library.
    在这里插入图片描述

二、访问修饰符

2.1 顶级类

  • public :可以被任何项目中的任何代码访问。
  • internal :只能在同一个程序集中访问(类库)

2.2 类中成员(字段、属性、方法)

修饰符说明
public对所有人可见。
private仅在类内部可见(默认值)。
protected在该类和派生类中可见。
internal在同一程序集内可见。
protected internal当前程序集或任何派生类中可见。
private protected当前程序集中的派生类可见。

2.3 internal

  • internal 默认是不能被其他的程序集访问的(By default, ‘internal’ members are not accessible from other assemblies.)
  • 但是,如果我们的测试类,需要引用其他程序集的internal, 有两种方法

1. 在AssemblyInfo.cs里

  • 允许名为 MyApp.Tests 的程序集访问我当前程序集中的 internal 成员
assembly: InternalsVisibleTo("MyApp.Tests")]

2. 在.csproj中添加

 <ItemGroup>
  <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
    <_Parameter1>MyApp.Tests</_Parameter1>
  </AssemblyAttribute>
</ItemGroup>

三、接口和抽象

特性接口(interface抽象类(abstract class
是否可以实现方法可以(从 C# 8.0 开始支持默认实现)可以(包括抽象方法和具体方法)
是否可以包含字段❌ 不可以✅ 可以
是否可以有构造函数❌ 不可以✅ 可以
是否可以继承多个✅ 支持多接口继承❌ 只能继承一个抽象类(但可实现多个接口)
是否可以包含访问修饰符❌ 全部都是 public(隐式)✅ 可以使用 public/protected/private
是否可以包含属性和事件✅ 支持属性、事件(无字段)✅ 支持属性、事件和字段
适合用于定义能力或行为规范提供基础实现和状态

四、协变/逆变

4.1 概念

在这里插入图片描述

4.2 应用

协变: 集合处理,IEnumerable 的协变特性使得可以统一处理不同派生类型的集合
逆变: 事件处理,使得基类事件处理器可以处理派生类事件

五、生命周期

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值