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

相关推荐

  • 1.7C#语言的异常(Exception)语句

    异常类派生自System.Exception类。 throw 使用 throw 关键字,程序可以显式生成异常。 e 是一个派生自 System.Exception类 的异常类的实例。 try-catch try…catch 语句用于捕获在代码块执行…

    C#语言教程 2021年1月7日
    04490
  • 1.4C#语言的类型(Type)

    C # 语言有两种类型:值类型 和 引用类型。值类型的变量直接存储数据,而引用类型的变量则存储对数据(称为“对象”)的引用。 System.Object类(别名object) 是所有类型的最终基类。值类型 派生自 System.ValueType类 (派生自 System.Object类)。派生自&…

    C#语言教程 2021年1月4日
    06700
  • 2.8C#函数成员之运算符(Operator)

    运算符声明 所有运算符都必须声明为 public 和 static。 隐式和显式运算符 implicit 或 explicit 关键字分别用于定义隐式转换或显式转换,定义转换的类型必须是该转换的源类型或目标类型,可用两种类型中的任何一种类型来定义两种用户定义类…

    C#语言教程 2021年2月8日
    01740

发表回复

登录后才能评论