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

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

C#:类和结构的区别,布布扣,bubuko.com

时间: 2024-10-25 04:52:57

C#:类和结构的区别的相关文章

2017年11月4日 vs类和结构的区别&amp;哈希表&amp;队列集合&amp;栈集合&amp;函数

类和结构的区别 类: 类是引用类型在堆上分配,类的实例进行赋值只是复制了引用,都指向同一段实际对象分配的内存 类有构造和析构函数 类可以继承和被继承 结构: 结构是值类型在栈上分配(虽然栈的访问速度比较堆要快,但栈的资源有限放),结构的赋值将分配产生一个新的对象. 结构没有构造函数,但可以添加.结构没有析构函数 结构不可以继承自另一个结构或被继承,但和类一样可以继承自接口 //哈希表 //不规定长度 不规定类型 不规定建类型 //Hashtable j = new Hashtable(); //

类和结构的区别

类是引用类型,结构是值类型,下面的例子中 大量使用结构类型 namespace CSharpTest { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct LOGFONTW { public int lfHeight; public int lfWidth; public int lfEscapement; public int lfOrientation; public int lfWeigh

类的声明 , 类和结构体的区别 , 内联函数

#include<iostream> using namespace std; class A;//类的声明 class B { private: A *a;//必须是指针 ,不能为 A a; }; class  A { private: B b; }; int main() {} 类和结构体区别: 结构体默认public 类默认是private 在继承方式:结构体默认公有继承 类默认私有继承 inline 调用内联函数并没有执行函数的调用过程,只是把函数的代码嵌入到了程序的调用点 , 减少了

swift 类和结构体

1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字母开头的匈牙利表示法. 结构体总是通过被复制而进行代码传递的. struct SForm{ var iXX:Int = 99 var strHello:String = "dsf" func testFunc(iXX:Int)->Int{ return iXX+1 } } class

类和结构(二)

二.匿名类型 var关键字用于表示隐式类型化得变量.var和new关键字一起使用时,可以创建匿名类型. 匿名类型只是一个继承自Object且没有名称的类. var caption = new {FirstName = "John",LastName="Doe"}; 这会生成一个包含FirstName,LastName属性的对象. 创建另一个对象: var doctor = new {FirstName = "James",LastName=&qu

C#基础 类、结构、抽象类、接口的相关概念

先来简单说一下他们各自的含义是什么: 类(class):类类型是由字段数据(成员变量)和操作字段数据的成员(属性.方法.构造函数.事件等)所构成的自定义类型.其中字段数据表示类实例(对象)的 状态.2.结构(struct):C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以 包括数据成员和方法成员. 3.抽象类:①:抽象类是特殊的类,只是不能被实例化:②:除此以外,具有类的其他特性:③:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何

3/类与结构区别

  C#结构和类的六点区别   引言··· 1 区别一:存储类型··· 3 堆和栈:··· 3 结构和类的存储类型:··· 3 区别二:继承性··· 4 区别三:初始化··· 5 区别四:构造函数··· 5 区别五:析构函数··· 7 区别六:关键字··· 7 类和结构的使用选择:··· 7 参考:··· 8 1.一览表:··· 8 2.结构和类的区别:··· 8 3.结构和类的异同:··· 8 4.源代码:··· 8 Struct,cs· 8 Class.cs· 10 Program.cs·

类,抽象基类,接口类三者间的区别与联系(C++)

联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html. 下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教. (1)结构上的区别: 普通类:数据+方法+实现 抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现 接口类:方法(纯虚方法) (2)概念上的区别: 普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类

OpenCV中图像的结构和区别

在OpenCV中,现在有很多种结构类型可以用来表示图像,它们之间有区别又有联系,现在记录一下它们之间的区别和相似之处,以便后面查看. 其中类型有: 1. Iplimage,2. Mat,3.CvMat, 4.CVArr: 其中: 1. IplImage: 较老版本的图像存储类型,在2.0之前使用: 2. CvArr: 也是较老的一种存储结构,是一种抽象的基类. 3. CvMat: 矩阵结构. 4. Mat:  新版本中使用的,推荐使用,是一个图像容器,基本上讲 Mat 是一个类,由两个数据部分组