社区
C#
帖子详情
C#中为什么要使用结构struct
wang355
2009-12-11 09:34:11
经常在见到在C#中使用到结构,请问C#中为什么要使用结构struct,知道的达人请说明,谢谢!
...全文
1700
19
打赏
收藏
C#中为什么要使用结构struct
经常在见到在C#中使用到结构,请问C#中为什么要使用结构struct,知道的达人请说明,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kuailebrid1
2009-12-11
打赏
举报
回复
c#中结构体是值类型,这点不同于类类型
结构是值类型:值类型在堆栈上分配地址,所有的基类型都是结构类型
类是引用类型:引用类型在堆上分配地址
堆栈的执行效率要比堆的执行效率高,可是堆栈的资源有限,不适合处理大的逻辑复杂的对象。所以结构处理作为基类型对待的小对象,而类处理某个商业逻辑
从某种程度上说c#是借鉴c++结构体的特点之后的一个改进
ivws_19
2009-12-11
打赏
举报
回复
LZ看看C#高级编程,里面有相应的描述
龙宜坡
2009-12-11
打赏
举报
回复
这不光是c#的问题,别的高级语言基本都有
简单的来说.结构体就是一个可以包含不同数据类型的一个结构.它是一种可以自己定义的数据类型.
首先结构体可以在一个结构中声明不同的数据类型.
第二相同结构的结构体变量是可以相互赋值的.
第三.节省内存空间
第四.高效率.
chowyi
2009-12-11
打赏
举报
回复
struct在性能方面有很大的优势 不过有很多限制
会飞的老鱼
2009-12-11
打赏
举报
回复
我也来学习
liherun
2009-12-11
打赏
举报
回复
[Quote=引用 8 楼 findcaiyzh 的回复:]
1. 结构式值类型,其值存储在堆栈上,空间上浪费些(如果有多个实例). 效率比较好。
2. 结构可以指定内存的layout.
[/Quote]学习
cpliu903
2009-12-11
打赏
举报
回复
Struct(结构) 与 Class(类) 可以说是一样, 你可以无视Struct 也可以, 不过他们也有些不同地方
特點:
1.结构是值类型,而类是引用类型。
2.与类不同,结构的实例化可以不使用 new 运算符。
3. 结构可以声明构造函数,但它们必须带参数。
4. 一个结构不能从另一个结构或类继承,而且不能作为一个类的基。所有结构都直接继承自 System.ValueType,后者继承自 System.Object。
5. 结构可以实现接口。
shabble
2009-12-11
打赏
举报
回复
你要不爱用结构,就都定义成类吧,一样能用
qldsrx
2009-12-11
打赏
举报
回复
楼猪发了个帖子消失了,居然也不谈谈自己的感想。
dazhabai
2009-12-11
打赏
举报
回复
struct里也可以有方法,小对象struct比较好,大对象class
LutzMark
2009-12-11
打赏
举报
回复
[Quote=引用 8 楼 findcaiyzh 的回复:]
1. 结构式值类型,其值存储在堆栈上,空间上浪费些(如果有多个实例). 效率比较好。
2. 结构可以指定内存的layout.
[/Quote]
UP
宝_爸
2009-12-11
打赏
举报
回复
1. 结构式值类型,其值存储在堆栈上,空间上浪费些(如果有多个实例). 效率比较好。
2. 结构可以指定内存的layout.
zetee
2009-12-11
打赏
举报
回复
struct 最早在c时代就发现了,他代表属性的集合,对于多个变量的封装是很好的东西,后来...struct
发展到class (c++ 以后) ,类的出现,OOP也是一个struct 的演变和发展,所以这么好的struct 做为向上兼容也好,作为多属性组合也好,以后的编程语言都应该少不了struct
成都锦福工作室
2009-12-11
打赏
举报
回复
1是速度2是与其他类型如C++等交互
qldsrx
2009-12-11
打赏
举报
回复
因为最初是只有结构体而没有类的,所以要保留结构体——没有爸爸怎么有儿子?
wartim
2009-12-11
打赏
举报
回复
int就是一个结构(struct Int32)
结构是值类型
hhc123
2009-12-11
打赏
举报
回复
mohugomohu
2009-12-11
打赏
举报
回复
值类型,速度快一点
include_me
2009-12-11
打赏
举报
回复
弄明白 值类型 与 引用类型 的区别你的问题就解决了.
说白了就是为了性能.
OpenGL-自主高性能三维GIS平台架构与实现-第二季
OpenGL-自主高性能三维GIS平台架构与实现/第二季:实现三维GIS球体+ 高程数据章节名称DEM基础1DEM基础知识1.介绍基本的DEM知识2.什么是DEM,作用是什么2DEM数据1.如何获取/ 传统测量/激光扫描/无人机测量/ 点云数据/ 倾斜摄影2.如何
使用
/局部小规模(栅格数据,图片/tif),3. 组织方式4. 根据
使用
目的不同,介绍多种优化方法3DEM图层的实现原理14DEM数据
结构
定义
struct
V3U3N4顶点数据的生成和计算WGS84投影计算5wgs84 投影球体被切成一个个小圆弧,一共60个投影带,分别为01,02.........60WGS的最新版本为WGS 84(也称作WGS 1984、EPSG:4326),1984年定义、最后修订于2004年。接口定义坐标转换Wgs84 数据加载6瓦片编号计算生成算法1. 经纬度到大地坐标的转换2.大地坐标到经纬度坐标转换3. 根据经纬度获取瓦片编号框架重构7智能指针重构框架1. 基类定义(所有的类继承自基类),基类派生自 std::enbale_shared_from_this2. 实现智能指针的动态转换接口3. 实现向下转换4. 已有的类实现全部
使用
智能指针重构5. 任务系统(多线程加载任务)8引入图层(Layer)1. 介绍图层的概念以及重要性2. 图层类实现3. 修改框架(
使用
图层的方式重构框架)9Layer-bug排查(绘制过程
中
出现错位,偶发)1. 框架重构后遇到问题(绘制结果错误)2. 瓦片索引方式发生变化,多线程
中
引起内存问题3. 修改索引方式,解决绘制偶发错误问题10引入数据源(TileSource)1. 数据源的作用与设计目的2. 当前存在的问题,数据调度
中
存在问题3. 数据源(TileSource)类实现11数据格式管理(FormatMgr)1. 数据格式管理(FormatMgr) 提出的目的,需要解决的问题2. CELLFormat基类接口抽象3. 实现几个标准格式类4. 修改框架流程,
使用
FormatMgr重构流程5. 扩展支持,后续支持任务格式数据加入系统12Task(任务)优化1. 任务
中
低耦合数据
结构
,目的是让Task更加的通用2. 修改任务读取代码与任务处理代码,完善处理流程DEM高程13DEM-数字高程定义1. 什么是数字化高程数据2. 当下GIS系统
中
有哪些常见的高程格式3. 课程体体系
中
使用
的哪种格式4. 高程类定义以及实现,并加入到FormatMgr 管理系统
中
14高程瓦片数据读取1. 介绍GIS系统相关的工具(在数据转换)数据生成方面可以解决大量时间2. 自定义高程瓦片格式说明3. 自定义高程格式文件解析,并以智能对象的方式引入到系统
中
4. 完善框架代码,适配高程数据15高程瓦片文件的读取1. 实现基本的读取算法2. 增加格式化组件,并加入到系统
中
3. 配置高程图层以及高程数据源,并加载数据,验证数据正确性16瓦片数据
结构
重构1.顶点生成2.UV坐标计算3.面数据生成17DEM重构绘制流程1. 修改绘制数据
结构
,去除无用字段2. 增加Mesh类,实现光栅数据转换成三角面数据,计算UV数据,提炼接口3. 修改系统调度,实现顶点数据,UV数据,以及面数据的生成与更新4. 按需更新数据,而不是每一帧更新18DEM-数据精度问题(CPU)1. 因为瓦片数据
使用
大地坐标作为系统输入,造成瓦片坐标很大,单浮点数据精度不够2.
使用
局部坐标的方式解决单浮点精度问题3. 调整相机参数,解决投影矩阵数据计算深度精度问题4. 修改绘制shader 实现对瓦片数据的绘制19DEM-数据精度问题(LogDepth)1.
使用
对数深度(log depth )算法在GPU
中
计算解决单浮点经纬计算问题2. 修改shader ,增加对(logDepth)算法支持3. 修改C++端代码,实现对shader数据的输入20DEM-数据
结构
优化1.当下
使用
CPU端数据通过接口的方式传递给GPU,速度慢2.
使用
Instance 方式降低Vertex Buffer 的大小,优化渲染系统21DEM-GPU缓冲区优化1.
使用
Vertex Buffer Object / Index Buffer Object / Instance 方式优化渲染系统2. 修改绘制接口,
使用
DrawElementsInstanceBaseInstance方式提升系统性能内存池与对象池22瓦片生成优化/对象池1. 相机移动过程
中
会频繁的建立与释放瓦片,对CPU有较大的消耗2. 引入内存池,避免频繁的内存申请与释放,降低CPU时间3. 改造智能指针对象,对象释放通知到内存管理,回收对象内存23改造任务系统支持对象池1. 任务系统是一个公用模块,被多个模块
使用
,避免频繁的内存操作,引起的内存碎片2. 实现对象池,并应用到任务模块法线计算24法线计算1. 修改现有顶点
结构
,增加法线支持2. 修改shader,增加法线顶点输入,
使用
平行光光照模型3. 修改绘制流程,支持光照计算,
使用
探照灯作为光源输入25顶点法线计算/共享法线计算1. 增加数据
结构
保存顶点数据被多个面共享的次数2. 计算面法线,并累加到顶点法线
中
3. 根据顶点被面共享的次数做平均法线计算4. 修改流程,按需更新法线数据26法线数据压缩1. 法线数据
使用
3 * float 数据存储,大大的增加了系统的数据2. 实现算法,将3 * float 数据压缩成4字节数据3. 改造绘制代码,支持压缩数据输入27GPU
中
计算产生法线数据(去掉CPU
中
计算)1. 引擎支持 Geometry Shader 阶段2. 编写 Geometry Shader,实现法线计算系统功能优化28重构CPU拾取流程1. 当下的拾取流程,只支撑二维数据拾取,无法准群的拾取三维数据2. Terrain
中
增加拾取接口,输入射线,输出拾取到顶点数据29绘制拾取结果1. 增加一个绘制点的方法,实现绘制代码2. 修改shader,增加logdepth3. 调试代码,花费了很多时间排查错误,最总排查到是因为uniform参数笔误写错造成。30任务系统完善,避免任务队列无线膨胀1. 任务系统
中
,没有限制队列的大小,生产者的能力远大于消费者的能力,造成任务队列膨胀2. 处理办法,限制生产者的生产能力,而不是限制任务队列大小(这种方式会造成业务逻辑异常复杂)3.
使用
sleep休眠方式(这种方式是严重错误的)31如何避免瓦片数据抖动1. 产生瓦片抖动的原因 ? 分裂算法与回退算法
中
间没有过度2. 引入过度流程,避免内存抖动,参数因子是一个重要的数据,需要谨慎
使用
3. 有必要结合瓦片自身数据动态计算参数因子32瓦片数据管理-fepk文件格式支持-全球数据加载1. 支持fepk文件格式,增加fepk读取组件,适配fepk文件2. fepk管理数据方式:一般情况选择全球前10级别作为基础级别,因数据量不大(1G)左右,后续以8级作为基础级别,全球19级别数据被划分为 2^8 * 2^7(512 * 256)个块。每个块
中
包含了256 * 256 张小瓦片33fepk高程数据读取 34高程分裂处理当瓦片没有高程数据,那么子节点以及其他后代节点该如何共享父节点的数据35lesson-734-高程瓦片分裂处理(2)-算法实现高程数据分裂算法实现实现对高程数据的切分,并对特殊数据进行处理36高程瓦片分裂处理(3)-问题排查 37高程瓦片分裂处理(4)-(后代节点更新问题)当一个瓦片高程数据更新后,他的儿子节点,孙子节点...该如何处理?38瓦片视锥裁剪错误高程数据更新后,没有技术计算瓦片包围盒信息,造成包围盒错误,进而引视锥计算错误39http支持1.引入三方库 Libcurl2.http类封装,支持http读取数据40fepk.server
使用
生成三维地球41改造四叉树-统一
使用
经纬度输入42地形网络生成算法重构 43引入球体坐标系 44
使用
球体坐标改造瓦片 45多图层(加载标签数据) 课时截图:镜头拉近后,显示细节数据加载矢量SHP国界线数据:加载矢量三维白膜数据截图高程数据加载点云数据 加载倾斜摄影数据
c#
结构
(
struct
)总结
c#
结构
(
struct
) 在学习
结构
的过程
中
,一直处于懵逼状态,不知道
结构
是什么,它有什么作用,我们能不能再程序
中
用到等种种问题。本片文章是本人查阅相关资料总结的一些小的知识点,希望对各位能提供一定的帮助。 1、什么是
结构
在
C#
中
,
结构
是值类型数据
结构
,用来封装多个不同类型的变量。它使得一个单一变量可以存储各种数据类型的相关数据。
struct
关键字用于创建
结构
体。 2、
结构
的作用
结构
类型适用于表示Point(点)、Rectangle(矩形)和Color(颜色)等轻量型对象,尽管可以将一
C#
学习——语法——
Struct
(
结构
)
结构
类型(“
struct
ure type”或“
struct
type”)是一种可封装数据和相关功能的值类型。
使用
struct
关键字定义
结构
类型。
c#
---
结构
体(
struct
)
在
C#
中
,
结构
体是值类型数据
结构
。它使得一个单一变量可以存储各种数据类型的相关数据。
struct
关键字用于创建
结构
体。
结构
体是用来代表一个记录。假设您想跟踪图书馆
中
书的动态。您可能想跟踪每本书的以下属性: Title Author Subject Book ID 1. 定义
结构
体 为了定义一个
结构
体,您必须
使用
struct
语句。
struct
语句为程序定义了一个带有多个成员的新的数据类型。 例如,您可以按照如下的方式声明 Book
结构
:
struct
Books { ...
关于
C#
中
struct
使用
new 初始化
C#
中
对于
struct
我们进行初始化时可以
使用
new 语句 例如有一个
结构
体Point
struct
Point { floatx; float y; } 我们将其实例化时可以
使用
语句: Point p = new Point(); 这不同于类
使用
new 语句,我们知道对一个类
使用
new语句会在托管堆上分配空间,而
struct
是值类型所以应该在栈上为其分配空间。 实际上,以上语句的功能与 Point P; 功能基本相同,不同的是
使用
new 语句,
C#
会认为接口体
中
的成员已经得到初始..
C#
110,538
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章