前言
本章介绍到的是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#引入的一个类成员,它使得类中的对象可以 像数组那样方便、直观的被引用
- 索引器非常类似于属性,但索引器可以有参数列表,且只能作用在实例对象上,而不能在类上直接作用
- 定义了索引器的类可以像访问数组一样,可以使用[ ] 运算符,通过对象[下标]的方式访问类的成员
索引函数的用法
程序设计过程中常常会遇到这样一些类,它们的主要作用是维护一组数据的集合
- 索引函数维护的可以是——多个离散的字段
- 索引函数维护的可以是——数组类型的字段
下面让我们来演示一下索引函数的用法:
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关键字加中括号[]进行定义,其中的参 数表示所要访问的集合元素的下标。使用时只要在对象后的中括号里指定下标就可以访问目标元素
总结
属性和索引函数会经常看到,大家需要熟练掌握并且可以运用,下期我们将会讲解面向对象中类的继承