博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 中类和结构的区别
阅读量:7230 次
发布时间:2019-06-29

本文共 2272 字,大约阅读时间需要 7 分钟。

类:

类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存
类有构造和析构函数
类可以继承和被继承
结构:
结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象。
结构没有构造函数,但可以添加。结构没有析构函数
结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的(以下摘录):
C#结构体和类的区别问题:在C#编程语言中,类属于引用类型的数据类型,结构体属于值类型的数据类型,这两种数据类型的本质区别主要是各自指向的内存位置不同。传递类的时候,主要表现为是否同时改变了源对象。
C#结构体和类的区别技术要点:
    ◆类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。
    ◆在一个类中,可以定义默认的、不带参数的构造函数,而在结构体中不能定义默认的、不带参数的构造函数。两者都可以定义带有参数的构造函数,通过这些参数给各自的字段赋值或初始化

代码运行如下:类中赋值以后,两个对象中的值都发生变化,而结构体原来对象的值为发生变化

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace ConsoleApplication1{    public enum Gender    {         男,        女    }    public struct sPerson     {        public string name;        public int age;        public Gender sex;        public void say() {            Console.WriteLine("Hello , my name is {0} , i am {1} years old", this.name,this.age);        }        public sPerson(string name,int age,Gender sex) {            this.name = name;            this.age = age;            this.sex = sex;        }        public sPerson() {            this.name = "default";            this.age = 0;            this.sex = Gender.男;          }    }    public class Person    {        public string name;        public int age;        public Gender sex;        public void say() {            Console.WriteLine("Hello , my name is {0}, i am {1} years old", this.name,this.age);        }        public Person(string name,int age,Gender sex) {            this.name = name;            this.age = age;            this.sex = sex;        }        public Person() {            this.name = "default";            this.age = 0;            this.sex = Gender.男;        }    }    class Program    {        static void Main(string[] args)        {            sPerson sp1 = new sPerson("jack", 25, Gender.男);            sp1.say();            sPerson sp2 = new sPerson();            sp2.say();            Person p1 = new Person();            p1.say();            Person p2 = new Person("mick", 30, Gender.男);            p2.say();            Console.ReadKey();        }    }}

 

转载于:https://www.cnblogs.com/xiaoliwang/p/9508826.html

你可能感兴趣的文章
xml中单双引号
查看>>
JQuery文件上传插件JQuery.upload.js的用法简介
查看>>
Megacli 工具
查看>>
HTML5 多文件选择和FileList
查看>>
spring-boot与log4j2整合
查看>>
对函数式编程的理解
查看>>
Tomcat源码分析----一个http请求的经历
查看>>
Unix-Linux 编程实践教程 第二章 小结
查看>>
.未来只有坚持自己的信念.
查看>>
TODO:Golang指针使用注意事项
查看>>
五大角色和主域控制器
查看>>
QTcpserver编程
查看>>
ScrollView + Listview 实现方案优选
查看>>
redis概述与使用
查看>>
linux下如何设置和查看系统环境变量
查看>>
jaxws-webservice编程
查看>>
网众安装U盘带WINPE和MaxDOS
查看>>
Linux man文档英语单词
查看>>
oracle的权限和角色区别
查看>>
组策略管理——软件限制策略(4)
查看>>