Unity开发之C#基础-属性与索引函数

前言

本章介绍到的是c#中的属性和索引函数,他们在日常编码中经常见到,大家要好好学习一下。
制作不易还请各位一键三连哦!

属性

在游戏中,我们通常会玩某个角色,或者某个武器,他们都会有自己对应的属性
在这里插入图片描述
那么这些属性是属于这个人物或者装备的,他们会给角色不同的加成,那么在代码中的属性是什么样的作用呢?

属性的作用

为了实现对数据的良好封装,C#提供了属性访问函数(简称属性,Property),主要用于控制对字段的访问。属性访问函数包括get访问函数和set访问函数,分别用于对字段的读取和设置。

下面我们来看一下属性的语法:

using System;

namespace C_Sharp属性与索引函数
{
    
    
    class Program
    {
    
    
        static void Main(string[] args)
        {
    
    
            Console.WriteLine("Hello World!");
        }
    }

    //创建一个学生类
    class Student
    {
    
    

        string name;//声明变量name
        public string Name//定义属性
        {
    
    
            set
            {
    
    
                name = value;
            }

            get
            {
    
    
                return name;
            }
        }
        

    }
}

get访问函数没有参数,默认返回类型是属性的类型,表示属性返回值。
set访问函数的默认返回类型为void,value表示外部传递的属性值。

在上面的代码中我们发现,Student类中的name字段,也就是他的名字的修饰符我们是没有书写的,也就是默认的私有的,那么我们想要对name字段进行访问或者赋值操作,就需要通过他的公有属性Name,下面我们来看一下如何通过公有属性进行操作

using System;

namespace C_Sharp属性与索引函数
{
    
    
    class Program
    {
    
    
        //声明一个学生类对象,用来调用学生类中的变量和函数等
        static Student student = new Student();

        static void Main(string[] args)
        {
    
    
            student.Name = "想吃烤地瓜";//通过公有属性来进行访问
            Console.WriteLine(student.Name);//输出更改后的名字
        }
    }

    //创建一个学生类
    class Student
    {
    
    
        string name;//声明变量name
        public string Name//定义属性
        {
    
    
            set
            {
    
    
                name = value;
            }
            get
            {
    
    
                return name;
            }
        }
    }
}

属性只可以包含一个访问函数

如果一个属性中只有get访问函数,那么属性值不能被修改

private string name; 
public string Name 
{
    
     
	get 
	{
    
     
	return name; 
	} 
}

如果一个属性中只含有set访问函数,那么属性值不能被读取。

private string name; 
public string Name 
{
    
     
	set 
	{
    
    
		name = value; 
	} 
}

属性的本质

属性的典型用法是一个公有属性对应一个私有字段,但这并不是强制要求。属性的本质是方 法,在代码中可以进行各种控制计算。

private int birthYear; 
public int Age 
{
    
     
	get 
	{
    
     
		return 2021 - birthYear; 
	} 
}

访问函数的特性

c#3.0版本以后,推出了一些新的特性

由原来的这样书写:

public class Student 
{
    
     
	private string name; 
	public string Name 
	{
    
     
		get 
		{
    
     
			return name; 
		} 
		set 
		{
    
     
			name = value; 
		} 
	} 
}

可以简写为新的:

public class Student 
{
    
     
	public string Name 
	{
    
     
		get; 
		set; 
	} 
}

新特性的局限

虽然新的特性方便了许多,但同样也有局限性:
自动属性的使用也存在一定的限制:首先它要求必须同时包含get和set访问函数, 或者只包含get函数;其次是自动生成的字段是完全隐藏的,即使在当前类的方法 代码中也不能直接访问,而是仍需通过属性进行读写

索引函数

索引函数又称为索引器(Indexer)是C#引入的一个类成员,它使得类中的对象可以 像数组那样方便、直观的被引用

  1. 索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用
  2. 定义了索引器的类可以像访问数组一样,可以使用[ ] 运算符,通过对象[下标]的方式访问类的成员

索引函数的用法

程序设计过程中常常会遇到这样一些类,它们的主要作用是维护一组数据的集合

  1. 索引函数维护的可以是——多个离散的字段
  2. 索引函数维护的可以是——数组类型的字段

下面让我们来演示一下索引函数的用法:

using System;

namespace C_Sharp属性与索引函数
{
    
    
    class Program
    {
    
    


        static void Main(string[] args)
        {
    
    

        }
    }
    class Teacher
    {
    
    
        public string Name {
    
     get; set; }
        private string homePhone; 
        private string officePhone; 
        private string mobilePhone; 
        public Teacher(string name) 
        {
    
     
            this.Name = name; 
        }
        public string this[int index] 
        {
    
     
            get 
            {
    
     
                if (index == 0) 
                    return homePhone; 
                else if (index == 1) 
                    return officePhone; 
                else if (index == 2) 
                    return mobilePhone; 
                else return "无此电话号码"; 
            } set 
            {
    
     
                if (index == 0) 
                    homePhone = value; 
                else if (index == 1) 
                    officePhone = value; 
                else if (index == 2) 
                    mobilePhone = value; 
                else
                    Console.WriteLine("没有该类型的电话");
            } 
        }
    }
}

可能大家会觉得这样的写法好复杂,但是他却可以大大的提高代码的可读性:

Teacher t1 = new Teacher("张三"); 
t1[0] = "66666666"; 
t1[1] = "1367772800"; 
t1[2] = "1111111111";
Console.WriteLine(t1[0] + "," + t1[1] + "," + t1[2]);

我们不难发现的是,索引函数其实只是在属性的基础上作了进一步的扩展,更有利于访问属性以及对属性做一些操作。

索引函数和属性一样包含get和set访问函数,使用this关键字加中括号[]进行定义,其中的参 数表示所要访问的集合元素的下标。使用时只要在对象后的中括号里指定下标就可以访问目标元素


总结

属性和索引函数会经常看到,大家需要熟练掌握并且可以运用,下期我们将会讲解面向对象中类的继承

猜你喜欢

转载自blog.csdn.net/qq_46093832/article/details/124512025