C#引用结构和类的区别

在C#中,结构是值类型,在声明变量的时候,就会对其分配内存;类是引用类型,如果只是声明变量,得到的是一个声明都没的空对象,也不可访问其中的成员。

例1(使用结构)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace nihao
{
///
/// 结构体表示复数
///
class Program
{
static void Main(string[] args)
{
ComplexNumber c1;
//c1赋值
c1.a = 1;
c1.b = 3;
//创建c2并且赋值
ComplexNumber c2 = c1;
c2.a = c2.b;
Console.Write("c1 = ");
c1.Write();
Console.Write("c2 = ");
c2.Write();
Console.ReadKey();
}
///
/// 创建结构,同时在结构中创建一个输出复数的方法
///
struct ComplexNumber {

        public float a;

        public float b;

        public void Write() {
        
            Console.WriteLine("{0}+{1}i", a, b);//输出复数(可引用) 
                       
        }
    }
}

}
例2(使用类)
using System;

namespace ConsoleApp3
{
///
/// 把结构成类,并引用运行,
/// 结构属于值类型,类属于引用类型
/// 值类型在声明变量时就会分配内存,但引用类型不会,只会得到一个空对象,也不可访问
/// 因此new用于显示创建类的变量(为类分配内存)
///
class Program
{
static void Main(string[] args)
{
//new在C#中作用
ComplexNumber c1 = new ComplexNumber();//为ComplexNumber类分配一个内存
ComplexNumber c2 = c1;
c1.a = 1;
c1.b = 3;
c2.a= c2.b;
Console.Write("c1 = ");
c1.Write();
Console.Write("c2 = ");
c2.Write();
}
}

class ComplexNumber { 
    
    public float a;
    public float b;

    public void Write() {

        Console.WriteLine("{0}+{1}i" ,a,b );
        Console.ReadKey();
    
    }
}

}

若要使用类,需要在声明变量时将
ComplexNumber c1;更改为ComplexNumber c1 = new ComplexNumber();
new用于显示创建类的变量,才得到在程序中真是存在的内存对象。
而且例1和例2所得结果不同
如图
例1结果

在这里插入图片描述
例2结果
在这里插入图片描述
由此可见值类型和引用类型的区别:
1、将值类型的一个变量a赋值给另一个变量b,其实就是把a的数据赋值给b,a和b两个变量是相互独立的。
2、将引用类型的一个变量a赋值给另一个变量b,其实是把a中指向所引用的类的指针赋值给b,另b也包含指向所引用的类的指针,本质上是对类进行操作(不知道这样讲是否合适)。如图
在这里插入图片描述
在执行c2.a=c2.b之后变为
在这里插入图片描述
以上就是我对于C#中引用结构和引用类的一些认识,由于刚刚起步学习C#,可能在认识上还有一些偏差,希望大家可以指正,谢谢大家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值