转载原地址: http://dotnet.9sssd.com/csbase/art/8

C#结构体和类的区别问题:在C#编程语言中,类属于引用类型的数据类型,结构体属于值类型的数据类型,这两种数据类型的本质区别主要是各自指向的内存位置不同。传递类的时候,主要表现为是否同时改变了源对象。

C#结构体和类的区别技术要点:
◆类在传递的时候,传递的内容是位于托管内存中的位置,结构体在传递的时候,传递的内容是位于程序堆栈区的内容。当类的传递对象修改时,将同时修改源对象,而结构体的传递对象修改时,不会对源对象产生影响。
◆在一个类中,可以定义默认的、不带参数的构造函数,而在结构体中不能定义默认的、不带参数的构造函数。两者都可以定义带有参数的构造函数,通过这些参数给各自的字段赋值或初始化。

C#结构体和类的区别之实现步骤:
(1)创建控制台应用程序项目,命名为“ClassAndStruct”。
(2)打开并编辑Program.cs文件,代码如下所示。

using System;   //C#结构体和类的区别
using System.Collections.Generic;
using System.Text; namespace ClassAndStruct
{
class Program
{
static void Main(string[] args)
{
//使用带参数的构造函数创建员工类的实例
classEmployee clsEmpA = new
classEmployee("Pony", "Smith", ); classEmployee clsEmpB = clsEmpA; //修改引用数据
clsEmpB.Age = ; //使用带参数的构造函数创建员工结构体的实例
structEmployee strctEmpA =
new structEmployee("Pony", "Smith", ); structEmployee strctEmpB = strctEmpA; //修改
strctEmpB.Age = ; Console.WriteLine("类的数据:姓名-{0} {1} 年龄-{2}",
clsEmpA.FirstName, clsEmpA.LastName, clsEmpA.Age);
Console.WriteLine("结构体的数据:姓名-{0} {1} 年龄-{2}",
strctEmpA.FirstName, strctEmpA.LastName, strctEmpA.Age);
Console.ReadLine();
}
} class classEmployee//表示员工的类
{
private string firstname; public string FirstName
{
get { return firstname; }
set { firstname = value; }
} private string lastname; public string LastName
{
get { return lastname; }
set { lastname = value; }
} private int age; public int Age
{
get { return age; }
set { age = value; }
} //类的默认构造函数,可以在类中重新定义
public classEmployee()
{
firstname = "";
lastname = "";
age = ;
}
//C#结构体和类的区别
//类的带参数的构造函数,在构造类实例的同时给字段赋值 public classEmployee(
string strFirstNamem, string strLastName, int iAge)
{
firstname = strFirstNamem;
lastname = strLastName;
age = iAge;
}
} struct structEmployee//表示员工的结构体
{
private string firstname; public string FirstName
{
get { return firstname; }
set { firstname = value; }
} private string lastname; public string LastName
{
get { return lastname; }
set { lastname = value; }
}
//C#结构体和类的区别
private int age; public int Age
{
get { return age; }
set { age = value; }
} //在结构体中不能定义默认的不带参数的构造函数,只能定义结构体的带参数的构造函数
public structEmployee(string strFirstNamem, string strLastName, int iAge)
{
firstname = strFirstNamem;
lastname = strLastName;
age = iAge;
}
}
}

(3)按F5键运行程序,运行结果如下所示。
类的数据:姓名-Pony Smith 年龄-33
结构体的数据:姓名-Pony Smith 年龄-43

C#结构体和类的区别之源程序解读
(1)本示例为了说明在传递时C#结构体和类的区别,在程序中分别定义了表示员工的类classEmployee类和表示员工的结构体structEmployee,并定义了各自的字段和构造函数。在主程序入口Main方法中,声明类的实例clsEmpA和clsEmpB,并使用构造函数创建clsEmpA类实例,然后将clsEmpA类实例传递给clsEmpB类实例,修改clsEmpB类实例的字段值,最后打印clsEmpA类实例中的字段,查看字段的值是否随clsEmpB类实例字段的修改而变化。同时,声明结构体的实例strctEmpA和strctEmpB,并使用构造函数创建strctEmpA结构体实例,然后将strctEmpA结构体实例传递给strctEmpB结构体实例,修改strctEmpB结构体实例的字段值,最后打印strctEmpA结构体实例中的字段,查看字段的值是否随strctEmpB结构体实例字段的修改而变化。程序的流程图如图8.1所示。 
(2)C#结构体和类的区别还有一个比较明显的区别,就是类能够定义默认的、不带参数的构造函数,并能在该构造函数中初始化字段。而结构体不允许定义默认的、不带参数的构造函数。

转载 C#结构体(struct)和类(class)的区别的更多相关文章

  1. c#中结构体(struct)和类(class)的区别

    一.类与结构的示例比较: 结构示例: public struct Person { string Name; int height; int weight public bool overWeight ...

  2. Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别

    Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始- ...

  3. sql自动生成golang结构体struct实体类

    废话不多说直接上地址 使用地址 http://www.linkinstars.com:8090/auto-code 项目github https://github.com/LinkinStars/Au ...

  4. C++/C#:类Class与结构体Struct的区别

    C++中: 默认的访问控制.继承访问权限不同:struct时public的,class时 private的: 其它基本一样. C#中: struct是值类型,class是引用类型的: struct S ...

  5. 你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06

    再续前文,在面向对象层面,Python做到了超神:万物皆为对象,而Ruby,则干脆就是神:飞花摘叶皆可对象.二者都提供对象类操作以及继承的方式为面向对象张目,但Go lang显然有一些特立独行,因为它 ...

  6. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  7. 结构体struct 与 联合union

    1.C语言中的结构体 1.1 定义 结构体是由一系列相同或不同类型的变量组成的集合. struct 结构体名{               //struct为关键字,“结构体名”为用户定义的类型标识. ...

  8. C语言 - 结构体(struct)比特字段(:) 详细解释

    结构体(struct)比特字段(:) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26722511 结构体(struc ...

  9. Go语言学习笔记(四)结构体struct & 接口Interface & 反射

    加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...

随机推荐

  1. Android studio编译之后显示中文乱码的问题解决办法

    在build.gradle文件中加上 android {compileOptions.encoding = "GBK"}

  2. 1346. Intervals of Monotonicity(dp)

    1346 简单dp #include <iostream> #include<cstdio> #include<cstring> #include<algor ...

  3. Parallel WebDriver executions using TestNG

    In this post, we will see how does one make use of TestNG to kick off parallel UI tests using WebDri ...

  4. bzoj1053: [HAOI2007]反素数ant

    51nod有一道类似的题...我至今仍然不会写暴搜!!! #include<cstdio> #include<cstring> #include<iostream> ...

  5. IIS6配置Asp.net MVC运行环境

    Windows server 2003 + IIS6 搭建Asp.net MVC运行环境 1.安装.Net Framework4.0. 下载地址: http://www.microsoft.com/z ...

  6. Servlet和JAVA BEAN 分析探讨

    在JSP中调用JAVA类和使用JavaBean有什么区别? 可以像使用一般的类一样使用JavaBean,Bean只是一种特殊的类.特殊在可以通过<jsp:useBean   />调用Jav ...

  7. qt创建android项目后需要加入的参数

    默认用qtcreator5.2.0创建了一个quick项目,却报如下错误: error:cstdlib.h no such file or directory 解决方法: 打开项目文件untitled ...

  8. 物联网操作系统HelloX应用编程指南

    HelloX操作系统应用编程指南 HelloX应用开发概述 可以通过三种方式,在HelloX操作系统基础上开发应用: 1.        以内部命令方式实现应用,直接编译链接到HelloX的内核she ...

  9. C#中使用visio控件

    C#中使用visio控件 2012-08-25 18:14:19|  分类: 技术相关|举报|字号 订阅     其实就是C#访问VISIO的自动化模型,以前做了不少C#和Excle及word 的交互 ...

  10. POJ 1083 Moving Tables

    题意:一个建筑物里有400个房间,房间都在一层里,在一个走廊的两侧,如图,现在要搬n张桌子,告诉你每张桌子是从哪个屋搬到哪个屋,搬桌子的线路之间不可以有重叠,问最少搬几次. 解法:贪心.一开始觉得只要 ...