C#类的属性和索引器

1.属性

属性是对类的字段提供特定的访问的类成员,是类的组成部分。由于属性是类的成员,因此可以访问私有实例变量,又不会危害类中的私有变量保护和隐私的数据。

格式如下:

[访问修饰符]  数据类型   属性名

get

//执行代码

teturn<表达式>;

    }

set

  {

//执行代码

   //表达式(可以使用关键字value)

    }

}

一个属性包含一个get方法和一个set方法,属性用做一个赋值操作的左值时,调用set方法;用作右值时,调用get方法 。属性中不一定同时包含get和set两张访问器。

例:

GradeBook.cs
using System;
public class GradeBook
{
    private string courseName;//string默认初始值为null
    public string CourseName //一个public类型的属性
   {
        get
        {
            return courseName;
        }
        //get访问方法使客户可以读取私有实例变量courseName的值,包含一条return语句
        set
        {
            courseName=value;
        }
        //set访问方法使客户可以修改courseName的值,value为上下文关键字
        //value在set访问方法中隐式的声明和初始化,完成任务后,set方法不会返回任何数据
    }
     public void DisplayMessage()
        {
            Console.WriteLine("welcome come to the book for {0}",CourseName);
        }
    
}

GradeBookTest.cs

using System;
public class GradeBookTest
{
    public static void Main(string[] args)
    {
        GradeBook myGradeBook = new GradeBook();
        //Console.WriteLine("initial course name is {0}", myGradeBook.CourseName);
        Console.WriteLine("输入课程名称:");
        myGradeBook.CourseName = Console.ReadLine();
        //ReadLine()被赋予courseName的set访问方法的隐式参数value,
        //然后参数value将其赋予实例变量courseName
        //Console.WriteLine();
        myGradeBook.DisplayMessage();
        Console.ReadLine();
    }
}

2.索引器

与属性类似,也是访问类中字段的方法,不同之处在于索引器的访问器采用参数,通过它可以对类的对象按照与数组相同的方式进行索引。

声明格式如下:

[访问修饰符]    数据类型   this   [索引类型  形参]

{

get

{

//执行代码

return表达式;

}

set

{

//执行代码

//表达式(可以使用value关键字)

}

}

使用格式如下:

对象名[索引]

实例:

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ex7_8
{
    class Program
    {
        static void Main(string[] args)
        {
            Array z = new Array();
            for (int i = 0; i < 100; i++)
            {
                z[i] = z.Multiple(i+1,5);
            }
            Console.WriteLine("1到100之间的整数与5的乘机是:");
            for (int i = 0; i < 100; i++)
            {
                Console.Write("{0}\t",z[i]);
            }
            Console.ReadLine();
        }
    }
}

Array.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ex7_8
{
    class Array
    {
        private long[] arr=new long[100];
        public long this[int index]
        {
            get
            {
                if (index < 0 || index >= 100)
                    return arr[0];
                else
                    return arr[index];
            }

            set
            {
                if (index < 0 || index >= 100)
                    arr[0] = value;
                else
                    arr[index] = value;
            }
        }
        public long     Multiple(int x,int y)
        {
            return(x*y);
        }
    }
}

结果:



你可能感兴趣的:(C#类的属性和索引器)