C# 继承与方法特性深入解析
1. 静态虚拟方法
在 C# 11.0 之前,无法将静态方法声明为虚拟方法,但现在接口可以实现这一功能。例如,在 .NET 运行时库中的 INumberBase<T> 接口定义了一个静态抽象属性 One ,要求每个数值类型实现自己的 One 属性。
public interface INumberBase<TSelf>
: IAdditionOperators<TSelf, TSelf, TSelf>,
...
{
/// <summary>Gets the value <c>1</c> for the
static abstract TSelf One { get; }
...
}
对于实例虚拟方法,调用时会根据调用方法的对象类型选择方法。但静态虚拟方法没有目标对象,运行时通过泛型类型参数来确定目标类型。例如:
public static T Two<T>()
where T : INumberBase<T>
{
return T.One + T.One;
}
当调用 Two<int> 时,CLR 知道 T.One 需要调用
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



