标签:hstp osc cst ann tar xfs adf iic ora
1、struct 结构与class(类)的区别
1)struct是值类型,class是对象类型
2)struct不能被继承,class可以被继承
3)struct默认访问权限是public,而class默认是private
5) struct不能由程序员申明构造函数,有编辑器自动生成,用于描述轻量级对象,执行效率高,例如:Line,Point等
6)struct的new和class的new是不同的,struct的new就是执行一下构造函数创建一个实例,再对所有字段进行复制。
而class则是在堆上分配一块内存再执行构造函数,struct内存并不是在new的时候分配的,而是是定义的时候分配。
7)struct 可以不用new来实例化,而类却要,如果struct不用new来实例化,那么结构的所有字段处于未分配状态。
2、验证struct和class的区别
1)struct是否可被class继承
/// <summary> /// 定义一个结构 /// </summary> struct WinPoint { public int Left; public int Right; } /// <summary> /// 定义一个类 /// </summary> class TestClass: WinPoint { public int Left; public int Right; }
这样,TestClass类继承结构是不行的,编译时报错如下
2)struct是否可被struct继承
/// <summary> /// 定义一个结构 /// </summary> public struct WinPoint { public int Left; public int Right; } /// <summary> /// 再定义一个结构 /// </summary> public struct WinPoint1: WinPoint { }
struct不能被另一个struct继承,编译时报错如下:
3)class是否可被class继承
/// <summary> /// 定义一个父类 /// </summary> public class TestClass { public int Left; public int Right; } /// <summary> /// 定义一个子类,继承父类属性 /// </summary> public class TestClass1 : TestClass { }
在使用的时候,可以调用父类的属性
public void TestClick(){ TestClass1 test1 = new TestClass1(); test1.Left = 10; test1.Right = 20; }
4)struct在方法传递是否是副本
类和结构的创建
/// <summary> /// 定义一个结构 /// </summary> public struct TheStruct { public int Left; public int Right; } /// <summary> /// 定义一个类 /// </summary> public class TheClass { public int Left; public int Right; } public class TestClass { /// <summary> ///赋值方法(结构) /// </summary> /// <param name="thestruct"></param> public static void StructTaker(TheStruct thestruct) { thestruct.Left = 20; thestruct.Right = 30; } /// <summary> /// 赋值方法(类) /// </summary> /// <param name="theclass"></param> public static void ClassTaker(TheClass theclass) { theclass.Left = 20; theclass.Right = 30; } }
调用的方法
private void btnTest_Click(object sender, EventArgs e) { //创建一个机构实例对象 TheStruct stu = new TheStruct(); //赋初始值 stu.Left = 1; //创建一个类实例对象 TheClass cla = new TheClass(); cla.Left = 1; //重新给机构和类赋值 TestClass.StructTaker(stu); //调用方法,重新设置为20 TestClass.ClassTaker(cla); //调用方法,重新设置为20 //输出结构 MessageBox.Show("结构stu.Left:"+stu.Left+",类cla.Left:"+cla.Left); }
最后的弹出结果,如下图
刚开始都初始化为Left的值为1,重新赋值为20时,机构的Left没有改变,类的Left改变了,这就证明当一个结构传递到一个方法时,被传递的只不过是一个副本,
而一个类被传递,被传递是一个引用对象地址。
参考网址:
http://www.cnblogs.com/tonytonglx/articles/2080470.html
标签:hstp osc cst ann tar xfs adf iic ora
原文地址:http://www.cnblogs.com/xielong/p/6690244.html