• c#结构体与类的区别


    一、结构体和类非常相似:
    1.定义方式:
        public struct Student
    {
        string Name;
        int Age;
    }
    public class Question
    {
        int Number;
         string Content;
    }
    2,两者都是container类型,这表示它们可以包含其他数据类型作为成员。
    
    3,两者都拥有成员,包括:构造函数、方法、属性、字段、常量、枚举类型、事件、以及事件处理函数。
    
    4,两者的成员都有其各自的存取范围。例如,可以将某一个成员声明为Public,而将另一个成员声明为Private。
    
    5,两者都可以实现接口。
    
    6,两者都可以公开一个默认属性,然而前提是这个属性至少要取得一个自变量。
    
    7,两者都可以声明和触发事件,而且两者都可以声明委托(Delegate)。
    
    二、结构体和类的主要区别
    
    1,结构是实值类型(Value Types),而类则是引用类型(Reference Types)。
    
    2,结构使用栈存储(Stack Allocation),而类使用堆存储(Heap Allocation)。
    
    3,所有结构成员默认都是Public,而类的变量和常量数则默认位Private,不过其他类成员默认都是Public。
    
    4,结构成员不能被声明位Protected,而类成员可以。
    
    5,结构变量声明不能指定初始值、使用New关键字货对数组进行初始化,但是类变量声明可以。
    
    6,结构不能声明默认的构造函数,也就是不拥有参数的非共享构造函数,但是类则无此限制。
    
    7,二者都可以拥有共享构造函数,结构的共享构造函数不能带有参数,但是类的共享构造函数则可以带或者不带参数。
    
    8,结构不允许声明析构函数(Destructor),类则无此限制。
    
    9,结构的实例(Instance)声明,不允许对包含的变量进行初始化设定,类则可以在声明类的实例时,同时进行变量初始化。
    
    10,结构是隐式继承自ValueType类,而且不能继承任何其他类型,类则可以继续自ValueType以外的任何类。
    
    11,结构是无法被继承的,类则可以。
    
    12,结构永远不会终止,因此CLR不会在任何结构上调用Finalize方法。类则是由内存回收进程加以终止,当内存回收进程检测到没有任何作用的类时,它就会调用类的Finalize方法。
    
    13,结构不需要构造函数,类则需要构造函数。
    
    其他区别:
    
    1,结构体是一种值类型,而类是引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。那么结构体就是当成值来使用的,类则通过引用来对实际数据操作。
    
    2,结构体的定义是:有些数据既是相互关联的,又共同描述一个完整事物,如:一个学生的整体信息,学号、姓名、性别等。而类则使用在需要比较有层次的数据上面。
    
    3,类是反映现实事物的一种抽象,而结构体的作用只是一种包含了具体不同类别数据的一种包装,结构体不具备类的继承多态特性 
    
    4,构造函数是为了初始化类的字段而存在的,而结构体并不需要初始化就能使用,因此,结构体中并不存在默认的构造函数。
    
    结构体:
    1,没有默认的构造函数,但是可以添加构造函数
    
    2,没有析构函数
    
    3,没有 abstractsealed(因为不能继承)
    
    4,可以不使用new 初始化,在结构中初始化实例字段是错误的
    
    类: 
    1,有默认的构造函数
    
    2,有析构函数
    
    3,可以使用 abstractsealed 
    
    4,必须使用new 初始化
  • 相关阅读:
    sql server 存储过程中使用变量表,临时表的分析
    C#实现图(Graph)
    C#实现平衡多路查找树(B树)
    设置webstorm缩写代码
    img标签在div中水平垂直居中--两种实现方式
    setInterval()的时间参数无法随参数的变化而变化
    seajs的模块化开发--实践笔记
    Xcode执行Analyze静态分析
    iOS10 下APP内跳转到系统设置WIFI界面
    convertRect view之间坐标系的转换
  • 原文地址:https://www.cnblogs.com/0315cz/p/8657209.html
Copyright © 2020-2023  润新知