2.5C#函数成员之属性(Property)

1.属性声明

属性的声明方式与字段相似,区别是属性声明以在分隔符 { 和 } 之间写入的 get 访问器或 set 访问器结束,而不是以分号结束。

属性需与字段配套使用,字段是数据成员(定义存储位置),而属性是为了操作private字段而生的函数成员(不定义存储位置)。

//常规语法
public class Person
{
    public string FirstName
    {
        get { return firstName; }
        set { firstName = value; }
    }

    private string firstName;
}
//Expression-bodied表达式声明法
public class Person
{
    public string FirstName
    {
        get => firstName;
        set => firstName = value;
    }

    private string firstName;
}

自动实现的属性语法会自动生成支持此属性的字段的存储位置并自动实现 getset 访问器,无需显式声明字段。

getset访问器(或 getinit访问器)只要书写其中一个并且未实现代码即为自动实现的属性

//自动实现的属性语法
public class Person
{
    public string FirstName { get; set; }
}

2.属性分类

名称修饰符
静态属性static 修饰
实例属性static 修饰

3.访问器

属性通过访问器实现,访问器用于定义访问属性或为属性赋值时执行的语句,get 访问器读取该值,set 访问器写入该值,可以使用 init 访问器代替 set 访问器用于仅在对象构造过程中初始化分配新值。

get 访问器是没有参数且返回类型为属性类型的方法,而set 访问器是value参数且返回值为void的方法。

同时具有 get 访问器和 set 访问器的属性是 读写属性,只有一个 get 访问器的属性是 只读属性,只有一个 set 访问器的属性是 只写属性

4.只读属性

字段可以通过readonly将字段声明为只读字段,属性可以通过访问器来将属性声明为只读属性

编译器会将自动实现的属性的 get 访问器隐式声明为 readonly,而不管属性声明中是否存在 readonly 修饰符。

//常规语法
public class Person
{
    public Person(string firstName) => this.FirstName = firstName;

    public string FirstName { get; }
}
//Expression-bodied表达式声明法
public class Location
{
   private string locationName;

   public Location(string name)
   {
      locationName = name;
   }

   public string Name => locationName;
}

5.抽象属性

声明抽象属性时(如本示例中的 Area),只需指明哪些属性访问器可用即可,不要实现它们。在此示例中,仅 get 访问器可用,因此该属性是只读属性。

public abstract double Area
{
    get;
}
public override double Area
{
    get
    {
        // Given the side, return the area of a square:
        return side * side;
    }
}

6.修饰符

属性其余还支持 new、override、sealed、virtual 修饰符。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csharplang/8256.html

(0)
上一篇 2021年2月5日 19:24
下一篇 2021年2月6日 02:44

相关推荐

  • 3.4C#引用类型之类(Class)

    1.类声明 2.继承 派生类只能有一个直接基类。但是,因为一个基类本身可能继承自另一个类,所以一个类可能会间接继承多个基类。省略基类相当于从 object 类型继承。 派生类会隐式获取基类的所有成员(除了基类的静态构造函数、实例构造函数、析构函数),所以无需在派生类再书写继承过来的基类成员,但您还可…

    C#语言教程 2021年3月4日
    02980
  • 5.3C#异步编程完整示例

    以下将用”如何烹饪早餐”示例来解释异步: 倒一杯咖啡。 加热平底锅,然后煎两个鸡蛋。 煎三片培根。 烤两片面包。 在烤面包上加黄油和果酱。 倒一杯橙汁。 1.同步代码 同步准备的早餐大约花费了 30 分钟,因为总耗时是每个任务耗时的总和。 这样做早餐花费的时间要长得多,有些食物在上桌之前就已经凉…

    C#语言教程 2021年5月3日
    03120
  • 2.3C#数据成员之字段(Field)

    字段是与类或类实例相关联的变量,字段定义存储位置。 1.字段声明和初始化 同变量。 2.字段分类 名称 修饰符 静态字段 用 static 修饰 实例字段 无 static 修饰 3.readonly修饰符 在字段声明中,readonly 修饰符表示只能 在声明期间初始化时或在同一个类的静态或实例构造函数中 …

    C#语言教程 2021年2月3日
    03440

发表评论

登录后才能评论