数据类型
C# 语言的数据类型分为值类型、引用类型。
值类型包括:浮点型、字符型、布尔型、整型、枚举型等;
引用类型包括:数组、委托、字符串、类、接口、对象等。
想要区【分值类型、引用类型】就必须理解他们的底层原理
public static void Main(String[] arge)
{
int a = 1;
int b = a; // b = a = 1
b = 2;
Console.WriteLine("a:"+a); //输出结果a:1
}
public static void Main(String[] arge)
{
/*
* 首先说明一下String是引用数据类型,但是他比较特殊,
* 他一但赋值后,值就无法被修改,只能指向另一个地址
* 每一个地址都有一个不可改变的值(字符串)
*/
String a = "1";// 假设说a指向了一个地址a1
String b = a; // 这时b的地址也指向了一个地址a1
b = "2"; // 因为 字符串的值无法被修改,所有指向了另一个地址b2
Console.WriteLine("a:"+a+" - " + "b:" + b); // 输出结果a:1 - b:2
// a 指向的地址为a1 b指向的地址为b2
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Windows2022_08_10
{
internal class MainCategorymian
{
// 程序入口
public static void Main(String[] arge)
{
Consume consume = new Consume();
consume.Record();
}
}
class Card
{
public string Money { get; set;}
}
class Consume
{
public void Record()
{
Card pCard = new Card()
{
Money = "8000"
};
Console.WriteLine("pCard 的 Money初始值:" + pCard.Money);
// 指向同一个地址
Card sCard = pCard;
// 修改这地址上的值
sCard.Money = "6000";
Console.WriteLine("pCard 的 Money被sCard修改后的值:" + pCard.Money);
/*
* 输出结果:
* pCard 的 Money初始值:8000
* pCard 的 Money被sCard修改后的值:6000
*/
}
}
}
相同点:
引用类型可以实现接口,值类型当中的结构体也可以实现接口;
引用类型和值类型都继承自System.Object类。
不同点:
值类型和引用类型最大的区别,就是它们在内存中的存储方式不同。
值类型的变量在栈中分配,引用类型的实例在堆中分配。
值类型是直接存储值,引用数据类型直接是引用其他地址值。
值类型在内存管理方面具有更好的效率,并且不支持多态,适合用做存储数据的载体;
引用类型支持多态,适合用于定义应用程序的行为。