PersonNewStruct personNewStruct = new PersonNewStruct()
{
Age = 36,
Name = "ADMIN",
Gender = Gender.Male,
};
public record struct PersonNewStruct(string Name, int Age, Gender Gender);
personNewStruct.Age = 40;//结构体的记录属性可以修改
无参数结构构造函数
//1:结构的初始化,某人调用无参构造函数
PersonInfo01 person = new PersonInfo01();
record struct PersonInfo01()
{
public object Id { get; init; } = 123;
public object Name { get; init; } = "admin";
}
//2:结构的初始化,没有显示构造,实例初始化属性为空
PersonInfo02 person2 = new PersonInfo02("admin");
record struct PersonInfo02(string name)
{
public object Id { get; init; } = 123;
public object Name { get; init; } = name;
}
//3:存在有参和无参构造函数,才能够初始化结构记录实例
PersonInfo03 personInfo03 = new PersonInfo03();
PersonInfo03 personInfoNew = new PersonInfo03("admin");
record struct PersonInfo03
{
//构造函数必须使用public修饰
public PersonInfo03()
{
}
//构造函数必须使用public修饰
public PersonInfo03(string name)
{
Name = name;
}
public object? Id { get; init; } = 123;
public object? Name { get; init; } = "lucy";
}
using全局使用
//其他地方不需要引入
global using System.Reflection;
扩展属性模式
object obj = new UserInfo
{
UserId = 123,
UserName = "admin",
Age = 36,
Address = new Address()
{
City = "WuHan"
}
};
if (obj is UserInfo { Address: { City: "WuHan" } })
{
Console.WriteLine("WuHan");
}
if (obj is UserInfo { Address.City: "WuHan" }) // Extended property pattern
{
Console.WriteLine("WuHan");
}
lambda特性标志
public class TestAttribute : Attribute
{
public void Show()
{
Console.WriteLine($"{this.GetType().FullName} 被构造~~");
}
}
Action<int> action = [TestAttribute](int a) => { };
Action<int> action = [TestAttribute] (int a) => { };
var method = action.GetMethodInfo();
var attribute = method.GetCustomAttribute<TestAttribute>();
attribute!.Show();
//Lambda标记特性修饰返回值
{
var f3 = [return: TestAttribute] (int x) => x;
ICustomAttributeProvider provider = f3.GetMethodInfo().ReturnTypeCustomAttributes;
object[] attributeArray = provider.GetCustomAttributes(typeof(TestAttribute), true);
foreach (TestAttribute attribute in attributeArray)
{
attribute.Show();
}
}
//Lambda标记特性修饰参数
{
var f4 = ([TestAttribute] int x) => x; // [A] x
ParameterInfo[] prarArray = f4.GetMethodInfo().GetParameters();
foreach (var para in prarArray)
{
TestAttribute attribute = para.GetCustomAttribute<TestAttribute>();
attribute.Show();
}
}