第二節:C#12新語法(主構造函數、集合表達式、默認Lambda參數)

一. 主構造函數

C# 12 引入了主構造函數,這是一種簡明的語法,用於聲明一些構造函數,它們的參數在類型主體中的任何位置可用

1. 初始化屬性

/// <summary>
/// 普通寫法
/// </summary>
public class People1
{
    public string name { get; set; }
    public int age { get; set; }

    public People1(string name, int age)
    {
        this.age = age;
        this.name = name;
    }
}
/// <summary>
/// 主構造函數寫法
/// </summary>
/// <param name="name"></param>
/// <param name="age"></param>
public class People2(string name, int age)
{
    public string name { get; set; } = name;
    public int age { get; set; } = age;
}

/// <summary>
/// 初始化屬性--普通寫法
/// </summary>
public readonly struct Distance1
{
    public readonly double Magnitude { get; }

    public readonly double Direction { get; }

    public Distance1(double dx, double dy)
    {
        Magnitude = Math.Sqrt(dx * dx + dy * dy);
        Direction = Math.Atan2(dy, dx);
    }
}

/// <summary>
/// 初始化屬性--主構造函數寫法
/// </summary>
public readonly struct Distance2(double dx, double dy)
{
    public readonly double Magnitude { get; } = Math.Sqrt(dx * dx + dy * dy);

    public readonly double Direction { get; } = Math.Atan2(dy, dx);

}


2. 依賴關係的注入

public interface IService
{
    Distance GetDistance();
}

public class ExampleController(IService service) : ControllerBase
{
    [HttpGet]
    public ActionResult<Distance> Get()
    {
        return service.GetDistance();
    }
}


3. 其它:瞭解即可

 

 

二. 集合表達式

   展開運算符(集合表達式中的 ..)可將其參數替換爲該集合中的元素。 參數必須是集合類型

  int[] row0 = [1, 2, 3];
  int[] row1 = [4, 5, 6];
  int[] row2 = [7, 8, 9];

  int[] total = [.. row0, .. row1, .. row2, 10];

  foreach (int row in total)
  {
      Console.WriteLine(row);
  }

 

三. 默認Lambda參數

  現在可以爲 Lambda 表達式的參數定義默認值。 語法和規則與將參數的默認值添加到任何方法或本地函數相同。

{
    //1.無參數
    Action line = () => Console.WriteLine("1111");
    line.Invoke();    //調用

    //2.只有一個輸入參數,括號可以省略
    Func<double, double> cube = x => x * x * x;
    Console.WriteLine(cube.Invoke(2));


    //3. C#12開始,lambda可以提供默認值
    var InCrementBy = (int source, int target = 1) => Console.WriteLine(source + target);
    InCrementBy(2);
    InCrementBy(2, 3);


}

 

 

 

 

 

 

!

  • 作       者 : Yaopengfei(姚鵬飛)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 聲     明1 : 如有錯誤,歡迎討論,請勿謾罵^_^。
  • 聲     明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章