C#:类和结构的区别

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C#:类和结构的区别第一、引用类型和值类型

类属于引用类型,而结构属于值类型。

结构在赋值时进行复制。 将结构赋值给新变量时,将复制所有数据,并且对新副本所做的任何修改不会更改原始副本的数据。

第二、继承性

类可以继承类或者实现接口,而结构只能实现接口,不能继承结构。

第三、实例化

类的实例化需要使用new关键字,但是结构的实例化则可以不使用new关键字。

第四、构造函数

类可以显式地包含无参的构造函数,但是结构却不可以显式地包含无参构造函数,只可以定义带有参数的构造函数。

第五、初始化实例字段

类可以在类的定义中初始化实例字段,但是结构不可以。

在结构声明中,除非字段被声明为 const 或 static,否则无法初始化。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; using System.Collections;namespace Consoleapplication{ class PRogram { static void Main(string[] args) { ClassPerson cp = new ClassPerson(); StructPerson sp = new StructPerson("Mary"); cp.ShowName(); sp.ShowName(); Console.ReadKey(); } } //可以继承接口 public struct StructPerson:IShowName { private string name; /// <summary>姓名</summary> public string Name { get { return this.name; } set { this.name = value; } } //可以显式地包含带有参数的构造函数 public StructPerson(string name) { this.name = name; } public void ShowName() { Console.WriteLine(this.Name); } } //可以继承接口和类 public class ClassPerson : Creature, IShowName { //可以在类的定义中初始化实例字段 private string name="John"; /// <summary>姓名</summary> public string Name { get { return this.name; } set { this.name = value; } } //可以显式地包含无参的构造函数 public ClassPerson() :base() { } public override void Move() { Console.WriteLine("Moving"); } public void ShowName() { Console.WriteLine(this.Name); } } public interface IShowName { void ShowName(); } public abstract class Creature { public abstract void Move(); }}

最后注意以下几点:

①在结构中初始化实例字段 的方法:一是使用参数化构造函数,二是在声明结构后分别访问成员。 对于任何私有成员或以其他方式设置为不可访问的成员,只能在构造函数中进行初始化。

②当不用new创建结构对象时需要注意,在初始化所有字段之前,字段将保持未赋值状态,同时对象不可用。也就是说,在结构对象包含的所有字段(包含私有的、公有的、隐藏的(自动实现的属性在运行时生成的))初始化之前,该结构对象中的方法或者属性都不可以调用。

③当结构包含引用类型作为成员时,必须显式调用该成员的默认构造函数,否则该成员将保持未赋值状态且该结构不可用。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航