Struct还是Class?
2014-03-03 17:36
543 查看
看到这么个标题,首先我们可以不用去想C或者Java。他们俩都没有这个麻烦。
当C开始过渡走向C++的时候,class出现了,struct当然也还在,不过strut已然不是当年的它了。记得去年读C++编程思想的时候,发现所有的类都是struct很是吃惊,看官尽可笑话在下没见过世面,不过一个疑问瞬间诞生了:区别呢?
##C++的区别很简单,我们就不要追究了,二者的区别仅在于struct默认成员都是共有的,而class则默认是私有的。(Java默认居然是default,前几天看到程序员面试宝典上面居然说默认是protected,不过还是有些差异,尽管你完全不必理会它。)
##下面就来测试一下C#。
struct TypeStruct
{
string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
因为我的工程是wpf工程,所以用了一个按钮触发。我本来以为就像C++说的那样,struct里面的成员默认是公有的,哦,我错了,我试图写出stc.name这样的代码去访问name属性,不可以。
那么看看输出结果:
class before changed:type class
struct before changed:type struct
type class changed
type struct changed
class after changed:type class changed
struct after changed:type struct
好的,如果是class的实例,我们发现在函数当中修改对象的值,会影响外部的对象。也就是说class的对象是引用性,函数传入的是对象的引用,而不是对象的副本。
struct却就像int这样的内建类型一样只传了一个对象的副本进去,正是值传递的意思。实际上,如果从语法表面上讲,C#的struct就是C++的struct的内部版本,因为除了内部的成员默认是外部不可访问的,其他用法似乎很像。(试想一下,C++里面的struct也好,class也好,如果不传指针或者引用的话,会不会是直接传入对象的值拷贝?)
当C开始过渡走向C++的时候,class出现了,struct当然也还在,不过strut已然不是当年的它了。记得去年读C++编程思想的时候,发现所有的类都是struct很是吃惊,看官尽可笑话在下没见过世面,不过一个疑问瞬间诞生了:区别呢?
##C++的区别很简单,我们就不要追究了,二者的区别仅在于struct默认成员都是共有的,而class则默认是私有的。(Java默认居然是default,前几天看到程序员面试宝典上面居然说默认是protected,不过还是有些差异,尽管你完全不必理会它。)
##下面就来测试一下C#。
struct TypeStruct
{
string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
class TypeClass { string name; public string Name { get { return name; } set { name = value; } }
private void btn_Click(object sender, RoutedEventArgs e) { TypeClass clz = new TypeClass(); TypeStruct stc = new TypeStruct(); clz.Name = "type class"; stc.Name = "type struct"; Console.WriteLine("class before changed:" + clz.Name); Console.WriteLine("struct before changed:" + stc.Name); changeClass(clz); changeStruct(stc); Console.WriteLine("class after changed:" + clz.Name); Console.WriteLine("struct after changed:" + stc.Name); } private void changeStruct(TypeStruct ts) { ts.Name = "type struct changed"; Console.WriteLine(ts.Name); } private void changeClass(TypeClass tc) { tc.Name = "type class changed"; Console.WriteLine(tc.Name); }
因为我的工程是wpf工程,所以用了一个按钮触发。我本来以为就像C++说的那样,struct里面的成员默认是公有的,哦,我错了,我试图写出stc.name这样的代码去访问name属性,不可以。
那么看看输出结果:
class before changed:type class
struct before changed:type struct
type class changed
type struct changed
class after changed:type class changed
struct after changed:type struct
好的,如果是class的实例,我们发现在函数当中修改对象的值,会影响外部的对象。也就是说class的对象是引用性,函数传入的是对象的引用,而不是对象的副本。
struct却就像int这样的内建类型一样只传了一个对象的副本进去,正是值传递的意思。实际上,如果从语法表面上讲,C#的struct就是C++的struct的内部版本,因为除了内部的成员默认是外部不可访问的,其他用法似乎很像。(试想一下,C++里面的struct也好,class也好,如果不传指针或者引用的话,会不会是直接传入对象的值拷贝?)
相关文章推荐
- (转)类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
- 类(class)和结构(struct)的区别是什么?它们对性能有影响吗?.NET BCL里有哪些是类(结构),为什么它们不是结构(类)?在自定义类型时,您如何选择是类还是结构?
- class struct enum 用 “,” 还是“;”
- C++雾中风景2:struct还是class?
- C++中的struct和class的区别
- struct和class的区别
- 挂多个css还是新建class-多用组合,少用继承
- Perl Class::Struct
- C#/WPF学习笔记:class 与 struct
- class 和 struct 的区别
- Struct和Class的区别
- 搜狗面试的经典题(C++map按值排序,class struct的区别)
- .NET中class和struct的区别
- C# 中 Struct 与 Class 的区别,以及两者的适用场合(转载)
- C++ - Struct和Class的区别
- class、interface、struct的区别
- struct 和 class
- C++中class与struct的区别
- C++,C中struct的区别,及class
- 不可不知的C#基础–从 struct 和 class的异同 说开去