结构体定义:
结构体的语法格式:
struct 结构体名
{
结构体成员变量(就相当于类中的成员)
}
结构体的特点
1.结构体不能被继承
2.结构体除了可以拥有结构体成员变量外,同样可以有属性(字段定义后不能赋值)
3.结构体和类一样,也可以拥有自己的行为(函数/方法)
4.结构体如果内部不存在任何构造函数,此时系统会像类那样为结构自动添加无参数的构造函数
5.结构体内部如果存在构造函数,此时必须对结构体内部所有成员进行初始化,如果不初始化,编译不会通过
6.如果结构体内部存在多个构造函数,不管你创建的结构体变量的时候有没有调用构造函数,都必须对所有构造体函数内部进行初始化结构体成员变量
7.C#4.0之前包含4.0,系统不支持手动调用结构体无参数的构造函数(写都不能写)完全由系统默认提供
C#5.0支持手动写默认的构造函数
8.结构体中不管你是否写了带有参数的构造函数,系统任然会为结构体提供一个无参数的构造函数
9.结构体中不能含有析构函数
10.结构类型的对象可以不实例化
结构和类的区别:
结构中的字段不允许赋初始值;结构中不允许定义无参构造函数;
带参的构造方法里必须给所有字段赋值;
结构不需要实例化对象就可以调用。
using System;
namespace 结构体 {
struct Father{
// 结构体成员变量
public string name;
public string age;
public string sex;
private float _height;
public float Height{
set{
_height = value;
}
get{
return _height;
}
}
// 普通方法
public void Say(){
Console.WriteLine ("结构体中的Say方法");
}
// 构造方法
// public Father() {
// name = "你好吗";
// age = "18";
// sex = "男";
// _height = 1.86f;
// Console.WriteLine ("调用结构体的无参数构造方法!~");
// }
public Father(string name,string age){
this.name = name;
this.age = age;
sex = "男";
_height = 1.86f;
}
// 析构方法
// 语法格式~+类名(结构体名)
// 析构方法没有返回值,没有返回值
// 作用:销毁对象的
// 不能手动进行调用,由系统自动调用
// 在实际开发中,析构函数的作用就是断开socket连接或者断开连接
// ~Father(){
//
// }
}
class MainClass {
public static void Main (string[] args) {
//结构体是值类型
// 结构体中的new它不是开辟空间,既然要开辟空间,必然就会有性能上的损失,因为托管堆需要优化,
// 结构体损耗性能比较小,如果你设计的数据是小型,轻量级的这时可以采用结构体存储
// 结构体可以指定结构体成员在内存中的分布
Father father = new Father();
father.Height = 1.86f;
Console.WriteLine (father.Height);
father.Say ();
//
// 1.创建学生结构体,包含姓名、年龄、学号、分数等信息, 并赋予其值,输出结构体成员的值;
// 2.有5名学生保存在结构体数组中,编程找出分数最高者, 输出该学生的全部信息;
// 3.对上述5名学生数组按年龄进行排序,并输出;
//练习4:
//设计一个计算面积类,该类含有一个接收两个参数(长,宽)的构造方法.
//并且含有一个普通方法可以计算长方形面积
//要求1:设计N个派生类,分别可以计算梯形面积,三角形面积,以及圆面积的方法
//要求2:改上体为结构体,重新实现需求.
//练习5:
// 1.(Fraction)类:
// 1)、成员变量
// 私有字段以及可读可写属性:分子、分母
// 2.成员方法:
// (1)打印分数信息(例如: 1 / 3)
// (2)约分
// (3)创建一个方法交换分子和分母的值
// (4)创建一个方法能同时得到加、减、乘、除、求余运算;
//练习6:
// 定义一个枚举类型PrimitiveType
// (包括:正方体 cube,球体 sphere,胶囊体 capsule,圆柱体cylinder,平面plane,四边形quad)
// 用来存在常用的游戏物体。定义一个枚举变量并赋值,输出其默认的整型值。
//练习7:
//定义一个结构体Vector
//成员如下 x,y(坐标值整型)
//设计一个类,可以接收一个结构体变量的方法,显示该x,y在地图中显示的位置
//比如 (0,1)
//*Me***
//*****
//*****
//*****
//练习8:
// 创建一个英雄结构体变量,成员包含英雄当前状态。
// 英雄的可以有名字,HP,MP等属性
//思考:假设有另外一个英雄也是结构体,在保证代码不重复的前提下如何能快速创建另外一个英雄.
//练习9:
//设计一个计算类,所在程序集为A,该类含有一个可以计算加减乘除取余的方法.
//要求,在B程序集使用A程序集的计算类,算出结果.
//练习10:
//设计一个类作为基类,该基类可以处理网络信号来提示用户当前的网络状态.
//设计其子类,覆盖父类处理信号的方法为处理异常中断信号,提示用户当前网络状态.
}
}
}