c#中如何扩展一个类?

约定

// 示例类, 后面一些基于此类扩展
public class Person
{
    public string Name { get; set; } 
    public DateTime Birthday { get; set; }
}

扩展方法(Extension Methods)(C#3.0)

扩展方法特点:

  • 定义一个静态类
  • 静态类中实现一个静态方法
  • 静态方法中的第一个参数添加this ClassName xxx
  • 在应用前需引用扩展类using xxxx
  • 和类方法一样使用扩展方法
using System;

var zhangsan = new Person();
Console.WriteLine(zhangsan.GetAge());

// 扩展方法
public static class PersonExtension
{
    public static int GetAge(this Person person) => DateTime.Now.Year - person.Birthday.Year;
}

部分类(partial class)(C#2.0)/部分方法(partial method)(C#3.0)

C#的分部关键字partial能够拆分一个类、一个结构、一个接口或一个方法为两个或更多个的文件。注意:partial 修饰符不可用于委托或枚举声明中。

扩展类型(C#13)

扩展类型修饰符: 隐式扩展(implicit extension)显示扩展(explicit extension), 不再局限于扩展方法,而是可以随意扩展实例成员、静态成员、属性成员和方法成员。

至于隐式扩展和显示扩展的区别现在还不清楚, c#13发布后再完善.

var zhangsan = new Person();
Console.WriteLine(zhangsan.GetAge());

// 隐式扩展类
public implicit extension PersonExtension for Person
{
    // 扩展属性
    public int Age => DateTime.Now.Year - this.Birthday.Year;
    // 扩展方法
    public int GetAge() => DateTime.Now.Year - this.Birthday.Year;
    // 扩展字段
    public int Age1;
    // 扩展静态方法
    public static Person Create() => new Person();
}

// 显示扩展类
public explicit extension Student for Person
{
    public string Grade => "五年级";
}

此处评论已关闭