using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* C#结构
* 结构与类相似,都表示可以包含方法成员和数据成员的数据结构;
* 与类级别一致,写在命名空间下面,可以定义字段,属性(不包括自动属性),方法,构造方法等;
* 结构的定义:
* struct 结构名
* {
* 内容
* }
* 结构的特征:
* 1.结构的实例化可以不使用new(当结构中没有字段,参数时,或者有参数时对结构的所有参数进行初始化后,才能不使用new进行实例化);
* 2.在结构中,除非字段声明为const或static,否则无法初始化;
* 3.结构体不能声明默认构造方法或析构方法,可以声明带参数的构造方法(但必须把所有字段赋值);
* 4.结构不能抽象,本身默认是密封的,不能被abstract和sealed修饰;
* 5.结构可以实现接口,但不能继承,不能作为基类;
* 6.结构采用复制方式赋值,对原始副本数据不会产生影响(字典存储时注意);
* 7.结构可以使用静态构造方法,与类基本一致;
* 8.结构静态构造方法在结构的实例成员被引用时调用,但创建结构类型的默认值不会出发;
* 9.编译器为结构提供了一个将每个字段初始化默认的构造方法(值要先初始在调用)
* 10.只有对结构进行new是才会调用默认构造方法,但默认构造方法不是必须的
* 运用:
* 结构是值类型,存储在栈中(存储访问速度快,空间小),可以定义一些小的结构提升速度;
* 结构与类的区别:
* 1.结构是值类型,类是引用类型;
* 2.结构使用栈存储,类使用堆存储;
* 3.结构成员不能被声明为projected,而类成员可以;
* 4.结构不能声明默认的构造函数,但是类则无此限制;
* 5.结构不允许声明析构函数,类无此限制;
* 6.结构的实例(instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同事进行变量初始化;
* 7.结构是隐式继承自ValueType类,而且不能继承任何其它类型,类则可以在声明类的实例时,同时进行变量初始化;
* 8.结构是无法被继承的,类则可以;
* 9.结构永远不会终止,因此CLR不会在任何结构上调用Finalize方法,类则是有内存回收进程加以终止,当内存回收进程检测到没有任何作用的类时,它就会调用类的Finalize方法;
*
*/
namespace ConsoleApplication7
{
#region
//class Program
//{
// static void Main(string[] args)
// {
// StudentClass studentClass = new StudentClass();
// StudentStruct studentStruct = new StudentStruct(123, "456", 10.6f);
// Console.WriteLine(studentStruct.numInt);//结构的结果是123
// Console.WriteLine(studentStruct.nameStr);//结构的结果是"qwe"
// Console.WriteLine(studentStruct.numFloat);//结构的结果是10.9
// Console.ReadKey();
// }
// //结构
// struct StudentStruct
// {
// public int numInt;//注意这里不能赋初始值
// //public const int num1 = 10;
// //public static int num2 = 15;
// public string nameStr;
// public float numFloat;
// public StudentStruct(int num, string name,float num1)//写在一起
// {
// //在这里赋值
// numInt = num;
// nameStr = "qwe";
// numFloat = 10.9f;
// }
// }
//}
//class StudentClass
//{
// public int num = 10;//这里可以赋初始值
//}
#endregion
class Program
{
//public StudentMessageClass studentClass1 = new StudentMessageClass();
//public StudentMessageClass[] studentClass2 = new StudentMessageClass[24];
//public StudentMessageStruct[] studentStruct = new StudentMessageStruct[24];
//public int[] nums = new int[5];
//private void WriteStudentMessage()
//{
// //类
// studentClass2[0].name = "";
// studentClass2[0].age = 18;
// //结构体
// studentStruct[0].name = "";
// studentStruct[0].age = 1;
//}
static void Main(string[] args)
{
StudentMessageStruct[] studentStruct = new StudentMessageStruct[24];
studentStruct[0].name = "小李";
studentStruct[0].age = 18;
studentStruct[1].name = "小王";
studentStruct[1].age = 15;
Console.WriteLine(studentStruct[1].name);
Console.WriteLine(studentStruct[1].age);
Console.ReadKey();
}
struct StudentMessageStruct//结构
{
public string name;
public int age;
}
class StudentMessageClass
{
public string name;
public int age;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*
* C#结构
* 结构与类相似,都表示可以包含方法成员和数据成员的数据结构;
* 与类级别一致,写在命名空间下面,可以定义字段,属性(不包括自动属性),方法,构造方法等;
* 结构的定义:
* struct 结构名
* {
* 内容
* }
* 结构的特征:
* 1.结构的实例化可以不使用new(当结构中没有字段,参数时,或者有参数时对结构的所有参数进行初始化后,才能不使用new进行实例化);
* 2.在结构中,除非字段声明为const或static,否则无法初始化;
* 3.结构体不能声明默认构造方法或析构方法,可以声明带参数的构造方法(但必须把所有字段赋值);
* 4.结构不能抽象,本身默认是密封的,不能被abstract和sealed修饰;
* 5.结构可以实现接口,但不能继承,不能作为基类;
* 6.结构采用复制方式赋值,对原始副本数据不会产生影响(字典存储时注意);
* 7.结构可以使用静态构造方法,与类基本一致;
* 8.结构静态构造方法在结构的实例成员被引用时调用,但创建结构类型的默认值不会出发;
* 9.编译器为结构提供了一个将每个字段初始化默认的构造方法(值要先初始在调用)
* 10.只有对结构进行new是才会调用默认构造方法,但默认构造方法不是必须的
* 运用:
* 结构是值类型,存储在栈中(存储访问速度快,空间小),可以定义一些小的结构提升速度;
* 结构与类的区别:
* 1.结构是值类型,类是引用类型;
* 2.结构使用栈存储,类使用堆存储;
* 3.结构成员不能被声明为projected,而类成员可以;
* 4.结构不能声明默认的构造函数,但是类则无此限制;
* 5.结构不允许声明析构函数,类无此限制;
* 6.结构的实例(instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同事进行变量初始化;
* 7.结构是隐式继承自ValueType类,而且不能继承任何其它类型,类则可以在声明类的实例时,同时进行变量初始化;
* 8.结构是无法被继承的,类则可以;
* 9.结构永远不会终止,因此CLR不会在任何结构上调用Finalize方法,类则是有内存回收进程加以终止,当内存回收进程检测到没有任何作用的类时,它就会调用类的Finalize方法;
*
*/
namespace ConsoleApplication7
{
#region
//class Program
//{
// static void Main(string[] args)
// {
// StudentClass studentClass = new StudentClass();
// StudentStruct studentStruct = new StudentStruct(123, "456", 10.6f);
// Console.WriteLine(studentStruct.numInt);//结构的结果是123
// Console.WriteLine(studentStruct.nameStr);//结构的结果是"qwe"
// Console.WriteLine(studentStruct.numFloat);//结构的结果是10.9
// Console.ReadKey();
// }
// //结构
// struct StudentStruct
// {
// public int numInt;//注意这里不能赋初始值
// //public const int num1 = 10;
// //public static int num2 = 15;
// public string nameStr;
// public float numFloat;
// public StudentStruct(int num, string name,float num1)//写在一起
// {
// //在这里赋值
// numInt = num;
// nameStr = "qwe";
// numFloat = 10.9f;
// }
// }
//}
//class StudentClass
//{
// public int num = 10;//这里可以赋初始值
//}
#endregion
class Program
{
//public StudentMessageClass studentClass1 = new StudentMessageClass();
//public StudentMessageClass[] studentClass2 = new StudentMessageClass[24];
//public StudentMessageStruct[] studentStruct = new StudentMessageStruct[24];
//public int[] nums = new int[5];
//private void WriteStudentMessage()
//{
// //类
// studentClass2[0].name = "";
// studentClass2[0].age = 18;
// //结构体
// studentStruct[0].name = "";
// studentStruct[0].age = 1;
//}
static void Main(string[] args)
{
StudentMessageStruct[] studentStruct = new StudentMessageStruct[24];
studentStruct[0].name = "小李";
studentStruct[0].age = 18;
studentStruct[1].name = "小王";
studentStruct[1].age = 15;
Console.WriteLine(studentStruct[1].name);
Console.WriteLine(studentStruct[1].age);
Console.ReadKey();
}
struct StudentMessageStruct//结构
{
public string name;
public int age;
}
class StudentMessageClass
{
public string name;
public int age;
}
}
}