黑马程序员技术交流社区

标题: C#中结构和类的区别 [打印本页]

作者: hou1989    时间: 2013-1-10 15:56
标题: C#中结构和类的区别
本帖最后由 hou1989 于 2013-1-10 17:07 编辑

在C#中结构和类有什么区别,什么时候使用结构。

作者: 许庭洲    时间: 2013-1-10 16:03
1. 类(class)可以被实例化,属于引用类型,是分配在内存的堆上的;
2. 类是引用传递的;
3.结构(struct)属于值类型,是分配在内存的栈上的;
4.结构体是复制传递的。
5.Int32和Boolean等都属于结构体。
作者: 希望的曙光    时间: 2013-1-10 16:05
一 类和结构的示例比较
结构示例:
public struct Person
   {
       string Name;
       public int height;
       int weight;
       public bool overWeight()
       {
           //implement something
           return false;
       }
   }
类示例:
public class TestTime
{
    int hours;
    int minutes;
    int seconds;
   
    public void passtime()
    {
        //implementation of behavior
    }
}
调用过程
public class Test
{
    public static ovid Main
    {
        Person Myperson=new Person()      //声明结构
        TestTime Mytime=New TestTime()    //声明类
    }
}

从上面的例子中我们可以看到,类的声明和结构的声明非常类似,只是限定符后面是struct还是class的区别,而且使用时,定义新的结构和定义新的类的方法也非常类似。
二 类和结构的区别
1、值类型和引用类型
结构:结构是值类型;
值类型在堆栈上分配地址,所有的基类型都是结构类型,例如:int对应System.int32结构,string对应system.string结构 ,通过使用结构可以创建更多的值类型。
类:类是引用类型;
引用类型在堆上分配地址。
结构:不能从另外一个结构或者类继承,本身也不能被继承,虽然结构没有明确的用sealed声明,可是结构是隐式的sealed。
类:完全可扩展的,除非显示的声明sealed,否则类可以继承其他类和接口,自身也能被继承。
说明:
虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样。

作者: hou1989    时间: 2013-1-10 17:06
许庭洲 发表于 2013-1-10 16:03
1. 类(class)可以被实例化,属于引用类型,是分配在内存的堆上的;
2. 类是引用传递的;
3.结构(struct)属 ...

谢谢,问题,已经解决
作者: hou1989    时间: 2013-1-10 17:06
希望的曙光 发表于 2013-1-10 16:05
一 类和结构的示例比较
结构示例:
public struct Person

谢谢,问题,已经解决
作者: 甘家利    时间: 2013-1-10 22:32
结构
结构不能有定义无参的构造函数,       
结构中不能给字段赋初始值
结构中不能有显示无参
结构赋值的时候是重新复制了一份
作者: 罗志强    时间: 2013-1-11 12:56
结构是值类型,类是引用类型




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2