属性和索引器

文章详细介绍了C#中的属性,包括属性的定义、访问器(get和set)、属性特征、静态属性以及自动实现属性的概念。同时,讨论了this关键字的用途,指出其在实例构造函数、实例方法和实例访问器中的应用。此外,还阐述了索引器的概念,它是如何提供对类中多个数据成员的访问,并通过示例展示了索引器的声明、get和set访问器的使用以及索引器的重载。
摘要由CSDN通过智能技术生成

一、属性

  1. 属性的含义

属性是代表类的实例或类中的一个数据项的成员。属性是指定的一组匹配的、称为访问器的方法。

  • set访问器为属性赋值

  • get访问器读取属性

  1. 属性特征

  • 属性是命名的类成员

  • 属性有类型

  • 属性可以被赋值和读取

  • 属性是一个函数成员

  • 属性不为数据存储分配内存

  • 属性可以执行代码块

  1. 属性声明和访问器

  1. set访问器

  • 拥有一个隐式的类型和属性类型相同的值参--value

  • 拥有一个返回类型--void

  1. get访问器

  • 没有参数

  • 拥有一个和属性类型相同的返回类型

  1. 声明格式:(属性中只允许有get和set访问器,顺序随意)

  1. 属性常与字段相关联

一种常见的方式是将字段私有化,然后关联一个public属性来控制类的外部对该字段的访问。(与属性相关联的字段称为后备字段或后备存储)代码示例如下:

图解示例如下:

可以在get和set访问器中执行代码,例如下图:

  1. 只读和只写属性

  • 只有get访问器的属性称为只读属性。

  • 只有set访问器的属性称为只写属性。

  • 属性中至少存在一种访问器。

  1. 属性与公共字段

  • 属性是函数成员而不是数据成员,允许你处理输入和输出,而公共字段不行。

  • 属性可以只读或只写,而公共字段不行。

  • 编译后的变量和编译后的属性语义不同。属性后期修改更容易。

  1. 自动实现属性

因为属性经常关联字段,C#提供了自动实现属性,允许只声明属性而不声明后备字段。编译器会为你创建隐藏的后备字段,并自动挂接到get和set访问器上。要点如下:

  • 不声明后备字段--编译器根据属性的类型分配存储。

  • 不能提供访问器的方法体--它们必须被简单的声明为分号。

  • 除非通过访问器,否则不能访问后备字段。因为不能用其他的方法访问它,所以实现只读和只写属性没有意义,必须同时提供读写访问器。

  1. 静态属性

属性也可声明为静态的,静态属性的访问器和所有静态成员一样,具有以下特点:

  • 不能访问类的实例成员

  • 不管类是否有实例,静态属性都是存在的

  • 从外部访问静态属性时,使用类名引用,而不是实例名

二、 this关键字

  1. this关键字在类中使用,是对当前实例的引用。

  1. 可使用的位置:

  • 实例构造函数

  • 实例方法

  • 属性和索引器的实例访问器

  1. 不可使用位置:

  • 不能在任何静态函数成员中使用this关键字。因为静态成员不是实例的一部分。

  1. this的作用目的:

  • 用于区分类的成员或本地变量或参数

  • 作为调用方法的实参

三、索引器

  1. 什么是索引器

索引器是一组get和set访问器,和属性类似。通过提供索引器,可以在许多可能的数据成员中进行选择。一个string类型索引器示例如下:

  1. 属性和索引器

  1. 属性和索引器都被主要用来访问其他数据成员,提供获取和设置访问。

  • 属性通常表示单独的数据成员

  • 索引器通常表示多个数据成员

  1. 和属性一样,索引器不用分配内存来存储。

  1. 和属性一样,可以设置只读或只写

  1. 和属性一样,get和set可以做任何事也可以什么都不做,只要get返回对应类型即可。

  1. 索引器总是实例成员,所以不能声明为static

  1. 索引器本身可以是任何类型,不仅仅是数值类型。

  1. 声明索引器

  1. 注意点:

  • 索引器没有名称,在名称位置是关键字this

  • 参数列表在方括号中间

  • 参数列表中必须至少声明一个参数

  1. 声明示例:

  1. 索引器和属性声明对比

  1. 索引器的get和set访问器

  1. 索引器的set访问器

  1. set访问器材被调用,接受下列两项数据

  • 一个隐式参数,名称为value,value持有要保存的数据

  • 一个或更多参数索引,表示数据应该要保存到哪里

  1. set访问器的语法和含义如下图(左语法,由含义):

  1. 索引器的get访问器

  1. 它的参数列表和索引器声明中的相同

  1. 它返回与索引器相同类型的值

  1. 索引器的重载

只要索引器的参数列表不同,类就可以有任意多个索引器。

类中重载的索引器必须有不同的参数列表。

  1. 索引器代码示例:

  class Employee
    {
        public string LastName;//调用字段0
        public string FirstName;//调用字段1
        public string City;//调用字段2

        public string this[int index] 
        {
            get 
            {
                switch (index) 
                {
                    case 0: return LastName;
                    case 1: return FirstName;
                    case 2: return City;
                    default:
                        throw new InvalidOperationException("index");
                }
            }

            set 
            {
                switch (index) 
                {
                    case 0:
                        LastName = value;
                        break;
                    case 1: FirstName = value;
                        break;
                    case 2: City = value; 
                        break;
                    default:
                        throw new ArgumentOutOfRangeException("index");

                }
            }
        }
    }
//使用索引器
static void Main(string[] args)
{
    Employee emp = new Employee();

    //设置根据索引器下标,设置对应的字段值
    emp[0] = "光";
    emp[1] = "头强";
    emp[2] = "森林";

    //根据索引器下标,获取对应的字段
    Console.WriteLine("LastName = {0},FirstName = {1},City = {2}", emp[0], emp[1], emp[2]);
}

(注:本章学习总结自《C#图解教程》)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值