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 => "五年级";
}
最后更新于 2024-08-08 17:41:09 并被添加「」标签,已有 1767 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭