c#中struct和class的区别
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的区别的更多相关文章
- 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实现 ...
- C#经典面试题 C# 中 Struct 与 Class 的区别,以及两者的适用场合
在一家公司面试时,第一个问题就是问到这个 转载 文章 http://www.cnblogs.com/waitrabbit/archive/2008/05/18/1202064.html 来解释此问题 ...
随机推荐
- usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示
一般在安装一些usb转串口驱动时会出现“文件的哈希值不在指定的目录”这样的提示,那么怎么解决呢?知道的别喷我哦,我只是再普及一下,嘿嘿1.鼠标移到右下角,点击“设置”,再点击“更改电脑设置”2.点击最 ...
- 配置nova instances使用NFS后端
首先先使用“nova delete”命令删除所有实例,释放磁盘空间. 停止nova服务:service libvirtd stopservice openstack-nova-compute stop ...
- 发布时去掉 debug 和 提醒日志,简单无侵入
在 proguard 文件中加入下面代码,让发布时去掉 debug 和 提醒日志,简单无侵入! -assumenosideeffects class android.util.Log { public ...
- HDU 5523 Game
坑题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...
- JavaScript中call,apply,bind方法的总结
原文链接:http://www.cnblogs.com/pssp/p/5215621.html why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之 ...
- linux下OpenOffice与SwfTools环境安装
一.安装所需要的库与组件 yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel 二.安装open ...
- 二部图(二分图判定--dfs)
题目链接:二部图 二部图 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 二 部图又叫二分图,我们不是求它的二分图最大匹配,也不是完美匹配,也不是多重匹配,而是证明一个图 ...
- Struts2--带参数的结果集
带参数的结果集: 配置文件: <result type="redirect">/user_success.jsp?t=${type}</result> js ...
- ionic系列
1. 推荐中文API https://github.com/ychow/ionic-guide
- Ubuntu如何备份和恢复系统 - 落花往事的日志 - 网易博客
在 使用Ubuntu之前,相信很多人都有过使用Windows系统的经历.如果你备份过Windows系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供 ...