第二节: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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
 
posted @ 2024-04-11 13:52  Yaopengfei  阅读(180)  评论(0编辑  收藏  举报