2010-10-29 73 views
0

的概念变化在5-6年前,当我在学校时,我有C作为我的编程语言。那时候,我读了关于结构和关于类的一点点。什么是从C到.net

那时我有一个概念,在struct下我们不能声明函数和其他类似的东西。

结构只允许值类型,它们本身也是值类型。我生活在同样的老年概念之下。早 3天,当我有一些谈话与我的同事,他们证明了结构还可以包含功能definations,constuctors任何更多的东西对我的

public struct abc 
{ 
    int a; 
    long b; 
    .... //No function nothing else can come here. Only variables 
}; 

思维但在.NET中,我看到的DateTime结构,它有功能构造函数和一切违背我多年的概念。

那么classes and struct之间有什么区别,如果每件事情都可以在struct中完成。

我相信会有一些很大的差异,由于哪些结构仍然与.net而不是过时。

这些差异是什么。

还有什么其他这样的概念可以改变一切。

+0

基本上完全不同,最大的是垃圾收集 – Sheen 2010-10-29 08:34:43

+0

投票结束,因为属于“过于宽泛”类别的“不是一个真正的问题”。@ Shantanu:老兄,你不能真正比较两种语言,有更多的差异在C#中的PS结构与C中的结构完全不同 - 解决完全不同于C中的结构的问题。 – 2010-10-29 08:37:31

+0

@Binary:你可能是对的,实际上,我拥有一个很好的“学习C#”书并且从那里开始工作。一个想法是,当新语言出现时,概念不会改变语法的变化,这就是为什么我带着相同的概念。但是我惊讶地发现这个变化 – 2010-10-29 08:49:26

回答

0

至于我可以告诉你问什么是C#结构和类之间的差异。

的关键区别是结构表现以下值类型语义,类行为也根据参考类型语义

  • 值类型直接将值存储在内存位置。如果您复制一个结构体,该值将被复制,您现在将两个值存储在两个单独的内存位置中。
  • 引用类型将值存储在内存位置和指向该内存位置的指针(或引用)。如果您复制课程,则复制参考,但数据保持不变。您现在有两个引用指向相同的内存位置。

除此之外,您可以在结构中放置什么(例如没有无参数构造函数和只有接口继承),但这并不重要。这些限制实际上是毫不相关的,你不应该选择仅仅使用一个结构来防止继承。重要的是该类型是如何在语义上表现的,而这正是在结构和类之间进行选择时应该关注的。

更多信息:
This question有一些很好的答案,可以更详细地解释这种差异。
MSDN page on structs有一些很好的限制信息。 Eric Lippart在结构和类的细节上有一个有趣的两部分博客文章(part1part2)。

0

看起来,C结构和.Net结构之间存在根本的区别。根据这MSDN文章,

结构还可以包含构造函数,常量,字段,方法,属性,索引器,运算符,事件和嵌套类型,但如果需要几个这样的成员,你应该考虑使你的类型为一个类代替。

结构可以实现一个接口,但它们不能从另一个结构继承。出于这个原因,struct成员不能被声明为protected。

1

那么什么类和差异结构,如果每一件事情能结构来完成。

并非所有的东西都可以在/结构中出现。结构是值类型,不通过引用进行访问,也不支持继承。

我相信会有一些很大的差异,因为结构仍然以.net而不是过时。

结构仍然有一些有限的用法(日期时间是最有用的值类型),但重要的一点是结构很少使用。如有疑问,请上课。

+0

结构有时被用作性能优化,ala XNA。 – 2010-10-29 08:42:40

1

一切柯林说,和一些更多的东西:

  • 结构是值类型。当你将一个结构赋值给另一个变量时,它会创建一个实例的副本。对两个变量存取器将改变两个不同的对象
  • 的Structs不能定义空构造
+0

这是一个很好的捕获我发现你的第一点有一个很大的区别,我也是向所有阐明这一点的人表示感谢 – 2010-10-29 08:54:50