博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.net 中struct(结构)和class(类)的区别
阅读量:6940 次
发布时间:2019-06-27

本文共 2597 字,大约阅读时间需要 8 分钟。

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继承

///     /// 定义一个结构    ///     struct WinPoint {       public int Left;       public int Right;    }    ///     /// 定义一个类    ///     class TestClass: WinPoint    {        public int Left;        public int Right;    }

这样,TestClass类继承结构是不行的,编译时报错如下

2)struct是否可被struct继承

///     /// 定义一个结构    ///    public  struct WinPoint {       public int Left;       public int Right;    }    ///     /// 再定义一个结构    ///    public struct WinPoint1: WinPoint   {            }

struct不能被另一个struct继承,编译时报错如下:

3)class是否可被class继承

///     /// 定义一个父类    ///     public class TestClass    {        public int Left;        public int Right;    }    ///     /// 定义一个子类,继承父类属性    ///     public class TestClass1 : TestClass {           }

在使用的时候,可以调用父类的属性

public void TestClick(){            TestClass1 test1 = new TestClass1();            test1.Left = 10;            test1.Right = 20;        }

4)struct在方法传递是否是副本

类和结构的创建

///     /// 定义一个结构    ///     public struct TheStruct {       public int Left;       public int Right;    }    ///     /// 定义一个类    ///     public class TheClass {        public int Left;        public int Right;    }    public class TestClass {        ///         ///赋值方法(结构)        ///         ///         public static void StructTaker(TheStruct thestruct) {            thestruct.Left = 20;            thestruct.Right = 30;        }       ///        /// 赋值方法(类)       ///        ///         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

 

你可能感兴趣的文章