C#之结构(struct)详解以及类和结构之间的区别

C#之结构(struct)详解以及类和结构之间的区别

一,结构(struct)又称结构体

1,定义

  • 结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。
  • 简单地说结构体是用来代表一个记录。

2,结构体的用法实例

首先在结构中定义相关数据

namespace jiegouanli
{
    public struct jiegou
    {
        public string name;
        public int nianling;
        public string bumen;
        public void studer()
        {
            Console.WriteLine("结构中的方法,输出的值");
        }
    }

然后在填入数据输出

class Program
    {
        static void Main(string[] args)
        {
            /*string str = "张三";
            int nl = 12;
            string str1 = "财务部";

            string strin = "李四";
            int nl1 = 20;
            string strin1 = "后勤部";*/
            //上面的声明变量比较麻烦,需要很大的内存开销
            //所以我们进行优化,使用结构来声明
            jiegou jg = new jiegou();
            jg.name = "张三";
            jg.nianling = 50;
            jg.bumen = "财务部";
            Console.WriteLine("我叫{0},年龄{1},部门{2}", jg.name, jg.nianling,jg.bumen);
            Console.ReadLine();
        }
    }
}

最后显示的结果

我叫张三 年龄50 部门财务部

3,结构的特点

  • 结构可带有方法、字段、索引、属性、运算符方法和事件。
  • 结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义无参构造函数。无参构造函数(默认)是自动定义的,且不能被改变。
  • 结构不能作为其他结构或类的基础结构。
  • 结构可实现一个或多个接口。
  • 结构成员不能指定为 abstract、virtual 或 protected。

二,类和结构之间的区别?

C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员。

类和结构之间的区别? 结构
类型 值类型 引用类型
继承
是否有析构函数
可否从类派生 可以
可否实现接口 可以 可以
是否可声明无参数的构造函数
数据成员可否在声明的同时初始化 声明为const或static可以,数据成员不可以 可以
构造函数中,必须为所有字段赋值
是否必须使用new运算符实例化
实例化时在栈还是在堆分配内存 堆,栈中保存引用
该类型的变量可否被赋值为null 可以
可否定义私有的无参构造函数 可以
是否总有一个默认的无参构造函数

三,类和结构的应用场景

  • 首先明确,类的对象是存储在堆空间中,结构存储在栈中。
  • 堆空间大,但访问速度较慢,栈空间小,访问速度相对更快。
  • 故而,当我们描述一个轻量级对象的时候,结构可提高效率,成本更低。
  • 当然,这也得从需求出发,假如我们在传值的时候希望传递的是对象的引用地址而不是对象的拷贝,就应该使用类了。
  • 当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
  • 对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;
  • 在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。
  • 大多数情况下,目标类型只是含有一些数据,或者以数据为主。

四,如果上面的解释看完以后,心中还有疑问,那么请收下我的膝盖,给您推荐这一篇大佬的文章,里面写的很详细,包括方法,案例等等


https://www.cnblogs.com/to-creat/p/5268729.html

猜你喜欢

转载自blog.csdn.net/XVJINHUA954/article/details/106671939