C#的Extension Members新功能

以往的Extension Method算是好用的功能,但唯獨沒有外掛data member的能力,感覺有點受限,如今新版C#把這最後一堆補上了。
下面是簡單範例:
public class Circle
{
private double _radius = 0.0;
public Circle(double radius)
{
Radius = radius;
}
public Circle() { }
//半徑
public double Radius
{
get => _radius;
set
{
if (value < 0)
{
throw new ArgumentOutOfRangeException(nameof(value), "Radius cannot be negative.");
}
_radius = value;
}
}
}
上面先定義一個圓型的類別,接下來在寫各種method及member:
public static class CircleExtensions
{
extension(Circle c)
{
//計算圓面積
public double Area()
{
return Math.PI * c.Radius * c.Radius;
}
//直徑
public double Diameter() => 2 * c.Radius;
public double Diameter2 => c.Radius * 2;
//計算圓周長
public double Circumference()
{
return Math.PI * c.Radius * 2;
}
}
extension(Circle)
{
public static double GetPi()
{
return Math.PI;
}
}
}
上面的extension分兩個部份,一個非靜態,一個為靜態,可看到丟進去的參數不同,一個要丟物件,一個丟型別就好。
參考資料