C#10及更早版本中新的C#11"必需"修饰符的替代方案



.NET7和C#11引入了一个新的修饰符required。文件显示:

所需的修饰符指示它所在的字段或属性必须由所有构造函数或使用对象初始值设定项。初始化的新实例的任何表达式该类型必须初始化所有必需的成员。

但是,如果我使用C#10或更早版本,当我想实现类似的行为时,我必须使用什么?也就是说,有其他选择吗?

查看您链接的参考中的示例:

Microsoft学习:必需的修饰符(C#参考)

我将重点介绍Person类:

public class Person
{
public Person() { }
[SetsRequiredMembers]
public Person(string firstName, string lastName) =>
(FirstName, LastName) = (firstName, lastName);
public required string FirstName { get; init; }
public required string LastName { get; init; }
public int? Age { get; set; }
}

如果我有必需的属性,我只会使用您需要的参数公开构造函数:

public class Person
{
//public Person() { }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
}

或者,您可以将构造函数设为私有,并使用工厂方法:

public class Person
{
private Person() { }
public static Person CreatePerson(string firstName, string lastName)
{
var person = new Person()
{
FirstName = firstName,
LastName = lastName
};
return person;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public int? Age { get; set; }
}

相关内容

  • 没有找到相关文章

最新更新