C#中类和结构体的区别
结构体和类同样能够定义字段,方法和构造函数,都能实例化对象,这样看来结构体和类的功能好像是一样的了,但是他们在数据的存储上是不一样的(以下摘录):
C#结构体和类的区别问题:在C#编程语言中,类属于引用类型的数据类型,结构体属于值类型的数据类型,这两种数据类型的本质区别主要是各自指向的内存位置不同。传递类的时候,主要表现为是否同时改变了源对象。
C#结构体和类的区别技术要点:
◆类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。
◆在一个类中,可以定义默认的、不带参数的构造函数,而在结构体中不能定义默认的、不带参数的构造函数。两者都可以定义带有参数的构造函数,通过这些参数给各自的字段赋值或初始化
代码运行如下:类中赋值以后,两个对象中的值都发生变化,而结构体原来对象的值为发生变化

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 类对象
{ //枚举
public enum Gender
{
男,
女
}
//结构体
public struct stuPerson
{
public string stuName;
public int stuAge;
public Gender stuSex;
public void stuSayHello()
{
Console.WriteLine("我是{0},年龄{1},性别{2}", stuName, stuAge, stuSex);
} //必须定义有参数的构造函数
public stuPerson(string name, int age, Gender sex)
{
this.stuName = name;
this.stuAge = age;
this.stuSex = sex;
} }
class Program
{
static void Main(string[] args)
{
//实例化类
Person Liuxiang = new Person(); //无参数的构造函数实例化的对象
Liuxiang.Name = "刘翔";
Liuxiang.Age = 30;
Liuxiang.Sex = Gender.男;
Liuxiang.SayHello();
//声明另一个实例
Person LXSon = Liuxiang;
LXSon.Age = 10;
//查看类 LiuXiang 和 LXSon中字段的值
Console.WriteLine("LiuXiang 年龄{0}", Liuxiang.Age.ToString()); //10
Console.WriteLine("LXSon 年龄{0}", LXSon.Age.ToString()); //10 Console.WriteLine();
//结构体
stuPerson YaoMing = new stuPerson("姚明",33,Gender.男);
YaoMing.stuSayHello();
stuPerson YMSon = YaoMing;
YMSon.stuAge = 13;
//查看结构体中 YaoMing 和 YMSon中字段的值
Console.WriteLine("YaoMing 年龄{0}", YaoMing.stuAge.ToString()); //10
Console.WriteLine("YMSon 年龄{0}", YMSon.stuAge.ToString()); //10 Console.ReadLine(); } } class Person
{ //定义字段
public string Name;
public int Age;
public Gender Sex; //定义方法
public void SayHello()
{
Console.WriteLine("我是{0},年龄{1},性别{2}", this.Name, this.Age, this.Sex);
}
//无参数的构造函数
public Person()
{ }
//有参数的构造函数
public Person(string name, int age, Gender sex)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
} } }
C#中类和结构体的区别的更多相关文章
- C++中类与结构体的区别
相信有一点专业知识的人都知道,C语言是一种结构化语言.它层次清晰,便于按模块化方式组织程序,易于调试和维护.在很大程度上,标准C++是标准C的超集.实际上,所有C程序也是C++程序,然而,两者之间有少 ...
- C语言的结构体和C++结构体的区别
关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不要void关键字,这样的方法就是构造器的 ...
- [C++] C/C++结构体的区别
C/C++结构体的区别 >_<:C中的结构体和C++中结构体的不同之处: 在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. >_<: ...
- C++类和结构体的区别
C++类和结构体的区别? 结构体默认数据访问控制是public; 类默认数据访问控制是private;
- C语言的结构体和 C++结构体的区别
C语言的结构体和 C++结构体的区别 关于C++中声明结构体中需要使用构造器创建实例对象的语法: <C++的结构体构造方法的基本概念:结构体的构造方法需要和结构体的名字相同,并且无返回值,也不 ...
- Swift - 类和结构体的区别
类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...
- C和C++结构体的区别
C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数.所以C的结构体是没有构造函数.析构函数.和this指针的. C的结构体对内部成员变量的访问权限只能是public,而C++ ...
- swift中类与结构体
写了12个Person来复习,不过完成同样的代码需要敲键盘的次数相比OC确实少了很多,这很多应该归功于Swift中不写分号,以及少了OC中的中括号. 一.类与结构体 两者在Swift中差不了多少了 类 ...
- C与C++结构体的区别
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
随机推荐
- mysql 语句优化心得
排序导致性能较慢 优化策略:1.尽量不使用排序 2.只查有索引的结果然后 内连接查询 select bizchance0_.* from biz_chance bizchance0_, biz_b ...
- USB串行端口
USB-SERIAL CH341A(COM22)USB串行端口
- jQuery快速入门知识重点
1.jquery中attr与prop的区别 attr:是通过setAttribute 和 getAttribute来设置的使用的是DOM属性节点 prop:是通过document.getEle ...
- maven的pom.xml配置文件讲解
<project xmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.o ...
- 自己定义progressdialog载入动画,这里还有旋转的载入条,美团,多个图片动画
自己定义progressdialog载入动画,这里还有旋转的载入条,美团,多个图片动画 下载Demo:http://download.csdn.net/detail/menglele1314/8775 ...
- 深度学习利器: TensorFlow系统架构及高性能程序设计
2015年11月9日谷歌开源了人工智能平台TensorFlow,同时成为2015年最受关注的开源项目之一.经历了从v0.1到v0.12的12个版本迭代后,谷歌于2017年2月15日发布了TensorF ...
- C++组合数(combination)的实现
实现: (nm) 既需要计算组合的总数 (32)=3: 也需要分别获得每一种组合的情形,用于穷举搜索: 1, 2; 1, 3; 2, 3 1. 递归实现 // picked + toPick == m ...
- numpy,scipy,pandas 和 matplotlib
numpy,scipy,pandas 和 matplotlib 本文会介绍numpy,scipy,pandas 和 matplotlib 的安装,环境为Windows10. 一般情况下,如果安装了Py ...
- 【】maze
[链接]点击打开链接 [题意] 小 T 被放到了一个迷宫之中,这个迷宫由 n 个节点构成,两个节点之间可能存在多条无 向边,小 T 的起点为 1 号节点,终点为 n 号节点.有 m 条无向边,对于每一 ...
- Redis学习笔记--Hash(五)
Redis的数据是通过key-value的方式存储的,对于value的数据类型有字符串.Hash.list.set.sortedSet在redis命令语句中,语句是忽略大小写的,但是key是不可以忽略 ...