浅谈 struct in c#.
1,大家来谈谈结构有什么好处,我知道结构是值类型,除了这之外有什么优点?因为有时我想sharp 在对java的改进,在java中都去掉了结构,为何sharp还保持。
2,为何我偶尔发现调用结构的方法有时主要new,而有时不需要?我发现这个问题,当时报错时才加new,过后没能好好理解。
------解决方案--------------------谈不上什么优点,对于小数据量,表示简单的信息,可以用struct,对于值类型,还可以给你带来一些麻烦,也算不上有点
------解决方案--------------------调用c写的dll很方便,还有c#没有删除指针,也是在这方面比较方便
------解决方案--------------------
当年微软模仿java的时候,它不但要模仿java,更要考虑自己的ms c++程序员。
------解决方案--------------------valuetype的“优势”主要是性能上的考量以及和非托管代码的互操作。
------解决方案--------------------struct可以让你能在系统堆栈中分配空间,如果都是class,那么创建一个变量的代价很大,因为在堆中分配消耗很大,还会造成碎片,严重时导致内存耗尽,
但struct变量会在栈中分配释放内存,不仅速度快,而且绝对不会产生碎片,
------解决方案--------------------其实struct变量是在堆栈中分配,new不new都会分配内存,而且即使new也是在堆栈中分配内存,
区别只是,new可以调用struct的构造函数,这样struct的成员就可以正确初始化,如果不new,则不调用构造函数,struct成员没有初始化,所以编译会出现变量未初始化错误,
其实你不用new,直接给每个成员都初始化,也是可以避免编译错误的,
------解决方案--------------------楼主的问题,MSDN已经做了详细的解释
1:在类和结构之间选择
2:这种情况应该使用class作为封装,而不是struct,MSDN同样也有说明
struct(C# 参考)
------解决方案--------------------结构的设计准则参见MSDN:
http://msdn.microsoft.com/zh-cn/library/ms229031(v=vs.100).aspx
------解决方案--------------------
作为版主,注意回复问题的表达方式,
8楼和9楼本该是你的回复,
而不巧的是,5楼恰恰说中了10楼的你
------解决方案--------------------我觉得主要是与C++/C保持一致,这样方便互相调用!
------解决方案--------------------真心没有用过,膜拜
------解决方案--------------------学习了,在window上写程序的和在硬件上写程序的区别啊
------解决方案--------------------struct给把数据指令化提供可能。比如int,如果它是class的话初始化它必须去操作内存数据,但它是struct有可能只要一个寄存器xor就成了
另外.net里共位体的实现也必须依赖于struct
------解决方案--------------------最主要的原因是性能问题
------解决方案--------------------P/Invoke必须要用基本数据类型或结构体,类是引用类型,无法在P/Invoke中传递,而对于Byte[]类型的结构体成员,都是通过Attrebute进行封装后使用的。
Java不支持结构体,导致了P/Invoke不可能实现,于是变为了Java Native Interface,自己编写一个符合接口生命的本地方法,给Java使用,超麻烦。