c#中struct和class的区别 z
1.struct 是值类型,class是对象类型
2.struct 不能被继承,class可以被继承
3.struct 默认的访问权限是public,而class默认的访问权限是private.
4..struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所 有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配, 换句话话说struct是在线程栈中创建,其定义时就已经被初始化,而class必须用new在托管堆中开辟空间。 因此struct与class在作为 参数传值过程中一个,struct是重新产生一个副本,而class则是传递的指针引用
举例说明:
class NewClass {
public int x;
}
struct NewStruct {
public int x;
}
class TestClass {
public static void structMethod(NewStruct s)
{
s.x = 5;
}
public static void classMethod(NewClass c)
{
c.x = 5;
}
public static void Main() {
NewStruct a = new NewStruct();//栈上分配
NewClass b = new NewClass();//堆上分配
a.x = 1;
b.x = 1;
structMethod(a);//产生了一个副本
classMethod(b);//指针一直只想堆中同一块内存
Console.WriteLine("a.x = {0}", a.x);//1
Console.WriteLine("b.x = {0}", b.x);//5
}
}
所以,如果想要让a.x中也产生一个a.x=5,怎要在方法应为structMethod(ref NewStruct s) ,在此设计到引用传参。
c#中struct和class的区别 z的更多相关文章
- C#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- C#中struct和class的区别详解 (转载)
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- C#中Struct与Class的区别
class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...
- 【zz】C++中struct与class的区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...
- C++中struct和class的区别 [转]
一. C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? ...
- C++ 中 struct和class 的区别
来自:http://hi.baidu.com/pengxiangbobin19890125/blog/item/b05586eee77300212df53411.html C++ prime 中 ...
- c#中struct和class的区别 详细[转]
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...
- C#中struct与class的区别详解
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...
- C++中struct 和 class的区别
首先,C++中类的定义,从狭义上理解,就是我们使用的class类型.从广义上,类就是定义了一个新的类型和新的作用域,它具有成员函数和成员数据. 而对广义类定义的实现分为两种,一种是使用struct实现 ...
随机推荐
- careercup-递归和动态规划 9.4
9.4 编写一个方法,返回某集合的所有子集. 类似leetcode:Subsets 解法: 解决这个问题之前,我们先要对时间和空间复杂度有个合理的评估.一个集合会有多少子集?我们可以这么计算,生成了一 ...
- iOS之在内存中绘图
与直接在UIView控件上绘图不同,在内存中绘图时,需要开发者自己准备绘图环境,Quartz 2D提供了一个非常便捷的函数:UIGraphicsBeginImageContext(CGSize siz ...
- C++ notes for beginners
作者:马 岩(Furzoom) (http://www.cnblogs.com/furzoom/)版权声明:本文的版权归作者与博客园共同所有.转载时请在明显地方注明本文的详细链接,未经作者同意请不要删 ...
- mono & apache install
1.red hat 6安装完后网卡是默认不启动的 作为双生兄弟的CENTOS同样如是 第一步 设置网卡开机启动 进入 路径此目录下修改网卡配置文件 如果网卡驱动正常 会有如下文件 只要修改 ifcfg ...
- jquery登录验证插件
最近写了个登录验证的jquery插件,其中功能还不是很完善,需要进一步改进,先放出来看看先. /** * 功能描述:本模块实现普通网站登录验证,以后可以添加二维码验证,以及第三方帐号登录验证 * 关联 ...
- ThinkPHP函数详解:F方法
我们已经了解了ThinkPHP中的S方法的用法,F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是PHP返回方式,所以其效率较S方法较高,因此我 ...
- html和css 基础梳理之一
原图出处:http://www.cnblogs.com/jiasongmao/archive/2016/08/24/5804298.html
- .Net 下FCKeditor上传图片加水印
配置FCKEditor请参考网上的. 如果你用的是.net的FCKEditor,把用到的FCKEditor.Net项目解压缩 在FCKEditor.net项目中,依次找到FileBrowser--&g ...
- 使用ROW_NUMBER进行的快速分页
DECLARE @pageSize INT ; DECLARE @pageIndex INT ; SET @pageSize = 5 SET @pageIndex =2 ; --第二页,每页显示5条数 ...
- O-C相关-10-动态类型检查
10-动态类型检查 1.动态绑定 1)OC 中方法的调用不由编译器决定,而由运行时决定 2)OC 中没有方法调用,只有消息接收. 一般称消息为选择器 2.动态类型检查 对象在运行时获得类型的能力称为内 ...