C# 结构体(Struct)
结构是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct关键字用于创建结构。
为了定义一个结构,必须使用struct语句。struct语句为程序定义了一个带多个成员的新数据类型。
比如,定义一个图书Books的结构体可以如下进行:
struct Books
{
public string title;
public string author;
public string subject;
public long book_id;
};
使用Visual Studio新建C#控制台应用程序Chapter10_001
在项目中添加如下代码:
//定义一个Books结构
struct Books
{
public string title;
public string author;
public string subject;
public long book_id;
};
class Program
{
static void Main(string[] args)
{
//声明Book类型数组
Books[] books = new Books[2];
//初始化books数组中的值
books[0].title = "ESSENTIAL C#6.0";
books[0].author = "Mark Michaelis Eric Lippert";
books[0].subject = "C#";
books[0].book_id = 100001;
books[1].title = "C++ Primer Plus Sixth Edition";
books[1].author = "Stephen Prata";
books[1].subject = "C++";
books[1].book_id = 100002;
//在控制台输出信息
foreach (Books b in books)
{
Console.WriteLine("Book Title:{0}",b.title);
Console.WriteLine("Book Author:{0}", b.author);
Console.WriteLine("Book Subject:{0}",b.subject);
Console.WriteLine("Book Id:{0}",b.book_id);
Console.WriteLine("------------------------------");
}
Console.ReadKey();
}
}
编译运行后结果如下:
C#结构的特点:
- 结构可以带有方法、字段、索引、属性、运算符方法和事件
- 结构可以定义构造函数,但是不可以定义析构函数。注意是不可以定义默认构造函数的,默认的构造函数是自动定义且不可以修改的
- 与类不同,结构不能继承其它结构或类
- 结构不可以作为其它结构或类的基础结构
- 结构可以实现一个或多个接口
- 结构成员不可以指定为abstract、virtual、protected
- 当使用new操作符创建一个结构对象时,会调用适当的构造函数来创建结构,与类不同,结构可以不用new操作符即可被实例化
- 如果不使用new操作符,只有在所有字段都被初始化后,字段才被赋值,对象才被使用
从上面可以看出类与结构主要的不同点如下:
类是引用类型,结构是值类型
结构不支持继承
结构不能声明默认的构造函数
在结构体中新增方法如下:
public void Display()
{
Console.WriteLine("Book Title:{0}", title);
Console.WriteLine("Book Author:{0}", author);
Console.WriteLine("Book Subject:{0}", subject);
Console.WriteLine("Book Id:{0}", book_id);
}
在Main方法中添加如下代码:
//调用结构中方法显示相关信息
Console.WriteLine("调用结构中方法显示相关信息:");
foreach (Books b in books)
{
b.Display();
Console.WriteLine("------------------------------");
}
编译运行后的结果如下:
C#枚举(Enum)
枚举是一组命名整型常量。它是使用enum关键字声明的。
C#枚举是值数据类型。也就是说枚举包含自己的值,并且是不可以继承的。
声明emum变量语法:
enum <enum_name>
{
enumeration list
};
enum_name指定枚举的名称
enumeration list是一个用逗号分隔的标识符列表
如:
enum Days {Sun,Mon,Tue,Wed,Thu,Fri,Sat};
在程序中添加一个枚举变量
//声明一个枚举变量
enum Days { Sun,Mon,Tue,Wed,Thu,Fri,Sat};
在Main方法中添加如下代码:
//枚举的使用
int WeekdayStart = (int)Days.Mon;
int WeekdayEnd = (int)Days.Fri;
Console.WriteLine("WeekdayStart-Monday:{0}", WeekdayStart);
Console.WriteLine("WeekdayEnd-Friday:{0}", WeekdayEnd);
编译运行后的结果如下: