C# 中class、struct 区别

本文深入探讨了C#中的结构(struct)与类(class)之间的关键区别,包括它们的访问权限、继承特性、构造函数、内存分配方式以及新实例化的不同。通过具体的代码示例,解释了结构如何作为轻量级对象使用,以及类与结构在传递方法参数时的行为差异。此外,文章还强调了结构不能继承、不能显式声明构造函数等特点,并提供了微软提供的实用例子供学习参考。
摘要由CSDN通过智能技术生成

1.struct 是值类型,class是对象类型

2.struct 不能被继承,class可以被继承

3.struct 默认的访问权限是public,而class默认的访问权限是private.

4.struct不能由程序员申明构造函数,即使是默认(不带参数)的构造函数,同样也不能有析构的处理部分。这是因为Struct的构造函数是由编译器自动生成的。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。

5.struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配

有人问“为什么不能继承System.Guid 中NewGuid方法呢”,答案是很简单的,因为System.Guid 是结构而不是类。

比如定义如下结构和类

 

public   struct  MyType
{
    
public   int  MyInteger;
}


public   class  Class1 : MyType
{
}


 

这段代码将抛出编译错误内容为 "Class1: cannot inherit from sealed class MyType". 

再如下面代码:

 

public   struct  MyType
{
    
public   int  MyInteger;
}


public   struct  Class1 : MyType
{
}


 

编译错误如下: "Class1: type in interface list is not an interface". 


下面列举出微软提供的例子供大家学习

// Copyright (C) 2000 Microsoft Corporation.  All rights reserved.

//  struct2.cs
using  System;

class  TheClass
{
    
public   int  x;
}


struct  TheStruct
{
    
public   int  x;
}


class  TestClass
{
    
public   static   void  structtaker(TheStruct s)
    
{
        s.x 
=   5 ;
    }

    
public   static   void  classtaker(TheClass c)
    
{
        c.x 
=   5 ;
    }

    
public   static   void  Main()
    
{
        TheStruct a 
=   new  TheStruct();
        TheClass b 
=   new  TheClass();
        a.x 
=   1 ;
        b.x 
=   1 ;
        structtaker(a);
        classtaker(b);
        Console.WriteLine(
" a.x = {0} " , a.x);
        Console.WriteLine(
" b.x = {0} " , b.x);
    }

}



这个例子的输出是:

a.x = 1b.x = 5

从这个例子例子可以看出,当一个结构被传递到一个方法时,被传递的只不过是一个副本,而一个类被传递时,被传递的是一个参考.所以a.x=输出的是1,不变,而b.x却变了.

还有的区别就是结构可以不用new来实例化,而类却要.如果你不用new来实例化一个结构,那么所有的字段将仍然处于未分配状态,直到所有的字段被初始化.和类一样,结构可以执行接口.更重要的是,结构没有继承性,一个结构不能从别的类继承,也不能是别的类的基类.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值