第二节: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 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。