C# 11 新特性:接口中的静态抽象成员

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 11 新特性:接口中的静态抽象成员相关的知识,希望对你有一定的参考价值。

之前

假设我们有一个非常复杂的数学运算方法:

public static int Calc(int x, int y) => x + y;

但是,上述方法只能支持int类型。如果需要传入其它数字类型,需要再次定义:

public static double Calc(double x, double y) => x + y;

对于这种需求,我们更希望采取范型的方式实现:

public static T Calc<T>(T x, T y) => x + y;

但是,运算符“+”无法应用于“T”和“T”类型的操作数

C# 11

引用System.Runtime.Experimental NuGet 包,并且在项目文件中添加<EnablePreviewFeatures>True</EnablePreviewFeatures>

定义如下方法:

public static T Calc<T>(T x, T y) where  T : INumber<T> => x + y;

现在,无论传递何种数据类型,都可正常执行:

Calc(4, 5);
Calc(4.0, 5.0);

这是因为,我们使用的是System.Runtime.Experimental下定义的数字类型,intdouble都继承了INumber接口:

INumber接口又继承了IAdditionOperators接口,定义了运算符“+”:

public interface IAdditionOperators<TSelf, TOther, TResult> where TSelf : IAdditionOperators<TSelf, TOther, TResult>

    public static abstract TResult operator +(TSelf left, TOther right);

这里就运用了 C# 11 提供的新特性,可在接口中添加静态抽象成员

此功能的主要场景是在泛型类型中使用数学运算符,因为运算符必须定义为静态抽象的:

除此之外,也可以在接口中定义其他静态成员和静态属性:

public interface IDemo

    public static abstract string StaticProperty  get; set; 

添加微信号【MyIO666】,邀你加入技术交流群

以上是关于C# 11 新特性:接口中的静态抽象成员的主要内容,如果未能解决你的问题,请参考以下文章

Java接口糟糕的新特性?接口内写final成员?static方法?

接口和抽象类的区别

接口接口优点接口的属性和方法特性接口与继承的区别接口与抽象类的区别匿名实现类JDK1.8新特性打印类名称

抽象类中的私有非抽象成员和继承 C#

day22-JDK新特性

day22-JDK新特性