C#——属性init访问器方法

init关键字:

1.init在属性或索引器中定义访问器方法

2.仅在对象构造期间为属性或索引器元素赋值

3.init强制实施不可变性(对象一旦初始化,将无法更改)

4.如下同时定义get和init访问器

复制代码
class Person_InitExample
{
     private int _yearOfBirth;

     public int YearOfBirth
     {
         get { return _yearOfBirth; }
         init { _yearOfBirth = value; }
     }
}
复制代码
var john = new Person_InitExample
{
    YearOfBirth = 1984
};

john.YearOfBirth = 1926; //不起作用,init关键字只允许在初始化对象过程中指定值

5.init访问器不强制调用方法设置属性(允许调用方使用对象初始化设定项,同时禁止以后的修改)

复制代码
class Person_InitExampleNullability
{
    private int? _yearOfBirth;
    //定义一个以可为空的值类型作为支持字段的仅init属性
    public int? YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}
复制代码

6.若要强制调用方设置初始化非null值,添加required修饰符

复制代码
//强制调用方设置初始非 null 值,可添加 required 修饰符
class Person_InitExampleNonNull
{
    private int _yearOfBirth;

    public required int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}
复制代码

7.init访问器用作表达式主题成员

复制代码
class Person_InitExampleExpressionBodied
{
    private int _yearOfBirth;

    public int YearOfBirth
    {
        get => _yearOfBirth;
        init => _yearOfBirth = value;
    }
}
复制代码

8.init访问器在自动实现的属性中使用

class Person_InitExampleAutoProperty
{
    public int YearOfBirth { get; init; }
}

9.private set属性  只读 属性和init属性区别

private set 版本和 read only 版本都需要调用方使用添加的构造函数来设置 name 属性。 通过 private set 版本,人员可在构造实例后更改其名称。 init 版本不需要构造函数。 调用方可使用对象初始值设定项初始化属性:

复制代码
class PersonPrivateSet
{
    public string FirstName { get; private set; }
    public string LastName { get; private set; }
    public PersonPrivateSet(string first, string last) => (FirstName, LastName) = (first, last);

    public void ChangeName(string first, string last) => (FirstName, LastName) = (first, last);
}

class PersonReadOnly
{
    public string FirstName { get; }
    public string LastName { get; }
    public PersonReadOnly(string first, string last) => (FirstName, LastName) = (first, last);
}

class PersonInit
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}


PersonPrivateSet personPrivateSet = new("Bill", "Gates");
PersonReadOnly personReadOnly = new("Bill", "Gates");
PersonInit personInit = new() { FirstName = "Bill", LastName = "Gates" };
复制代码

 

posted @   echo-efun  阅读(145)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示