MST
星途 面试题库

面试题:C#中自动属性与只读属性的差异及应用场景

请阐述C#中自动属性与只读属性在语法定义、赋值方式以及实际应用场景上有哪些不同之处,并各举一个简单的代码示例说明。
13.7万 热度难度
编程语言C#

知识考点

AI 面试

面试题答案

一键面试

语法定义

  • 自动属性:声明时只需指定类型和名称,自动生成私有字段及默认的get和set访问器。语法格式为 public <类型> <属性名> { get; set; }
  • 只读属性:只有get访问器,没有set访问器,可通过构造函数或初始化器赋值。语法格式为 public <类型> <属性名> { get; } (C# 6.0及以后简化写法),在之前版本常通过在构造函数中赋值来实现只读。

赋值方式

  • 自动属性:在对象实例化后,可在类内部及外部通过对象.属性名 = 值 的方式赋值。
  • 只读属性:在对象实例化时,通过构造函数或属性初始化器赋值,实例化后不能再赋值。

实际应用场景

  • 自动属性:适用于需要在程序运行过程中动态修改和读取属性值的场景,如用户信息的修改,一个用户对象的姓名、年龄等属性可能随时会更新。
  • 只读属性:适用于属性值在对象创建后不再改变的场景,如订单编号,一旦订单生成,编号通常不会改变。

代码示例

自动属性示例

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

class Program
{
    static void Main()
    {
        Person person = new Person();
        person.Name = "Alice";
        person.Age = 30;
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

只读属性示例

class Order
{
    public int OrderId { get; }
    public Order(int id)
    {
        OrderId = id;
    }
}

class Program
{
    static void Main()
    {
        Order order = new Order(1001);
        Console.WriteLine($"OrderId: {order.OrderId}");
    }
}