结构体(struct)是一种值类型,通常用于封装一些小型变量数据。在C#面向对象编程学习时,可以将结构体暂时理解成一种简单的对象。
声明结构体语法如下:
public struct 结构体
{
public 数据类型 变量名;
public 数据类型 变量名;
public 数据类型 变量名;
......
}
其中,public为访问修饰符,限定了结构体被访问的权限;struct关键字用于声明结构体。
例如,想要用一个结构体封装人员信息,例如姓名、证件号、性别等,可以这样创建结构体:
public struct person
{
public string name; //姓名
public string id; //证件号
public string gender; //性别
public int age; //年龄
}
1、创建结构体类型的变量:
结构体类型 结构体变量名 = new 结构体类型();
例如,结构体person,可以用于封装人员信息,现在想要封装John的信息,则创建John变量如下:
person John = new person();
2、结构体赋值:
结构体变量名.变量名 = 值;
例如,还是上面例子,John是男性,34岁,证件号Q123456,则需要如下操作:
John.name="John";
John.id="Q123456";
John.gender="male";
John.age=34;
3、结构体取值
结构体变量名.变量名
上面要输出John各种信息,则通过下面语句实现:
Console.WriteLine(John.name+John.id+John.gender+John.age);
此处只是为了介绍语法,输出结果并未排版:
JohnQ123456male34
可见,John的个人信息成功逐个输出。
结构的数据成员中还可以包含函数。例如上面例子,希望可以通过函数直接对结构体中各个变量赋值,或者通过函数直接输出个人信息,则可以通过如下代码实现:
//define struct person
public struct person
{
string name; //姓名
string id; //证件号
string gender; //性别
int age; //年龄
///
/// 用于对结构person变量中各个变量赋值。
///
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
public void informationGet(string _name,string _id,string _gender,int _age)
{
name = _name;
id = _id;
gender = _gender;
age = _age;
}
///
/// 用于输出结构体person变量中各个变量信息。
///
public void informationPrint()
{
Console.WriteLine("name={0}\nid={1}\ngender={2}\nage={3}",name,id,gender,age);
}
}
而调用上述函数,可以将信息录入或输出:
person John = new person();
John.informationGet("John", "Q123456","male",34); //录入John信息
John.informationPrint(); //输出John信息
此时输出结果:
name=John
id=Q123456
gender=male
age=34
此时可以注意,在声明结构体person时,可见到其中各个变量声明并没有使用public。假如尝试在Main函数中直接访问John中各个变量值,会发现程序报错,而修改加上public后,相关变量就可以访问了。相似的,假如试图将几个成员函数前public删除,同样会发现函数再不能被使用。
如果调用该结构的代码块,想要访问结构中的数据成员,那么需要使用关键字public限定数据成员。通常public关键字并不用在结构的数据变量上,而是用在结构函数前,因为这样做,可以保证其他代码块不直接接触成员变量,避免误操作。而仅使用函数,可以限定操作的过程。提升代码的安全性。在上面的代码中,只能通过成员函数informationGet来操作结构中数据成员。
以上范例完整代码如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace code
{
class Program
{
//define struct person
public struct person
{
string name; //姓名
string id; //证件号
string gender; //性别
int age; //年龄
///
/// 用于对结构person变量中各个变量赋值。
///
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
/// 用于赋值person中变量name姓名
public void informationGet(string _name,string _id,string _gender,int _age)
{
name = _name;
id = _id;
gender = _gender;
age = _age;
}
///
/// 用于输出结构体person变量中各个变量信息。
///
public void informationPrint()
{
Console.WriteLine("name={0}\nid={1}\ngender={2}\nage={3}",name,id,gender,age);
}
}
static void Main(string[] args)
{
//use struct person
person John = new person();
John.informationGet("John", "Q123456","male",34); //录入John信息
John.informationPrint(); //输出John信息
Console.ReadKey();
}
}
}