结构
1、什么是结构
1、结构式自定义的数据类型,与类相似
- 两者的区别
- 类是引用类型,而结构是值类型
- 结构是隐式密封的,不能被派生
struct 关键字
struct StructName
{
...
}
2、结构是值类型
和所有值类型一样,结构类型变量含有自己的数据
- 结构类型变量不能为null
- 两个结构变量不能引用同一个对象
2、对结构赋值
class Myclass
{ public int X; public int Y;}
struct MyStruct
{ public int X; public int Y;}
class Program
{
Myclass mc1 = new Myclass(), mc2 = null; //类实例
MyStruct ms1 = new MyStruct(), ms2 = new MyStruct(); //结构实例
mc1.X = ms1.X = 6; //将6赋给mc1.X和ms1.X
mc1.Y = ms1.Y = 66; //将66赋给mc1.Y和ms1.Y
mc2 = mc1; //赋值类实例 两个对象指向同一内存
ms2 = ms1; //赋值结构实例 两个对象指向不同内存
}
3、构造函数
1、实例构造函数
struct Mystruct
{
public int X;
public int Y;
}
class Program
{
static void Main()
{
Mystruct ms1, s2;
//Console.WriteLine("{0},{1}", ms1.X, ms1.Y); //编译错误,X,Y未赋值
ms2.X = 6;
ms2.Y = 66;
Console.WriteLine("{0},{1}", ms2.X, ms2.Y);
}
}
输出结果
6,66
2、字段不可初始化
struct Mystruct
{
//public int X = 6; //结构字段不可初始化
public int X;
//public int Y = 66; //结构字段不可初始化
public int Y;
}
3、结构是密封的
结构总是密封的,所以不能存在访问修饰符
4、结构作为返回值和参数
- 返回值 当结构作为返回值时,将创建它的副本并从函数成员返回
- 值参数 当结构作为是参数时,将创建实参结构的副本。该副本用方法的执行中
枚举
枚举是自定义的类型,与类或结构一样
- 与结构一样,枚举是值类型
- 枚举只是一种类型的成员:命名的整形值常量
- 关键字enum
enum Myenum
{
Green, //逗号隔开
Yellow, //逗号隔开
Red //没有分号
}
class Program
{
static void Main()
{
Myenum tmp1 = Myenum.Green;
Myenum tmp2 = Myenum.Yellow;
Myenum tmp3 = Myenum.Red;
Console.WriteLine("{0},{1}", tmp1, (int) tmp1);
Console.WriteLine("{0},{1}", tmp2, (int) tmp2);
Console.WriteLine("{0},{1}", tmp3, (int) tmp3);
}
}
输出结果
Green,1
Yellow,2
Red,3