C#值类型和引用类型,类和结构体
创始人
2024-11-12 14:40:25
0

1、类class是引用类型,多个引用类型变量的值会互相影响。存储在堆(heap)上

2、结构体struct是值类型,多个值类型变量的值不会互相影响。存储在栈(stack)上

using System; using System.Collections.Generic; using System.Text;  namespace VariableScopeSample3 {     class Vector     {         int value;          public  int Value { get; internal set; }     } } 
using System; using System.Collections.Generic; using System.Text;  namespace VariableScopeSample3 {      struct Point     {                   public int X { get; internal set; }         public int Y { get; internal set; }     } } 
using System;  namespace VariableScopeSample3 {     class Program     {         static int j = 20;         static int Main(string[] args)         {             int j = 30;             Console.WriteLine(j);            // return 0;              Vector x, y;             x = new Vector();             x.Value = 30;//value is a field defind in Vector class             y = x;             Console.WriteLine(y.Value);             y.Value = 50;             Console.WriteLine(x.Value);             Console.WriteLine("--------------------");             Point a,b;             a = new Point();             a.X = 30;             b = new Point();//下面有赋值,所以这里可省略             b = a;             Console.WriteLine(b.X);             b.X = 50;             Console.WriteLine(a.X);             Console.WriteLine(b.X);             return 0;          }     } } 

在C#中,结构体(struct)是值类型,这意味着它们在赋值时是通过值复制的方式来传递的

  1. Point a, b; 声明了两个 Point 类型的变量 a 和 b。由于结构体是值类型,这两个变量会被初始化为默认值(在本例中,X 和 Y 都是 0)。

  2. a = new Point(); 创建了一个新的 Point 实例,并将其赋值给变量 a

  3. a.X = 30; 将 a 的 X 属性设置为 30

  4. b = new Point(); 创建了另一个新的 Point 实例,并将其赋值给变量 b。这一步实际上不是必需的,因为你紧接着就重写了 b 的值。

  5. b = a; 将 a 的值复制给 b。由于结构体是按值传递的,这里发生的是 a 的值(此时 X 是 30)被复制给 b

  6. Console.WriteLine(b.X); 打印 b 的 X 属性,输出 30

  7. b.X = 50; 将 b 的 X 属性设置为 50。由于 b 是 a 的一个副本,这个操作不会影响 a

  8. Console.WriteLine(a.X); 打印 a 的 X 属性,输出 30,因为 a 和 b 是独立的副本。

  9. Console.WriteLine(b.X); 再次打印 b 的 X 属性,输出 50

关于 b = new Point(); 这一行代码可以省略的问题:

因为在执行 b = a; 之前,b 的值并不重要,因为它会被立即覆盖。省略这一行代码不会影响程序的行为,因为 b 会在赋值时得到 a 的副本。

相关内容

热门资讯

策略辅助!途游四川辅助器是真的... 策略辅助!途游四川辅助器是真的吗(辅助挂)都是存在有辅助方法(有挂辅助)1、不需要AI权限,帮助你快...
攻略辅助!边锋老友圈怎么开辅助... 攻略辅助!边锋老友圈怎么开辅助(辅助挂)本来存在有辅助器(有挂方法)1、边锋老友圈怎么开辅助辅助器安...
方案辅助!吉祥填大坑攻略(辅助... 方案辅助!吉祥填大坑攻略(辅助挂)本来存在有辅助脚本(竟然有挂)1、吉祥填大坑攻略辅助软件下载优化,...
妙招辅助!微信填大坑辅助(辅助... 妙招辅助!微信填大坑辅助(辅助挂)总是是有辅助软件(的确有挂)1、下载好微信填大坑辅助透视辅助下载之...
法子辅助!功夫川麻老是输什么情... 法子辅助!功夫川麻老是输什么情况(辅助挂)一直是真的有辅助app(真实有挂)1、首先打开功夫川麻老是...
方案辅助!天酷辅助器(辅助挂)... 方案辅助!天酷辅助器(辅助挂)切实真的是有辅助脚本(有挂教学)1、每一步都需要思考,不同水平的挑战天...
绝活辅助!朋朋政和麻为什么一直... 绝活辅助!朋朋政和麻为什么一直输(辅助挂)切实是真的有辅助工具(有挂方法)1、进入到朋朋政和麻为什么...
学习辅助!闲逸斗地主辅助(辅助... 学习辅助!闲逸斗地主辅助(辅助挂)本来是真的有辅助技巧(有挂猫腻)一、闲逸斗地主辅助游戏安装教程牌型...
方针辅助!蜀山四川辅助脚本(辅... 方针辅助!蜀山四川辅助脚本(辅助挂)切实是真的有辅助技巧(有挂攻略)暗藏猫腻,小编详细说明蜀山四川辅...
操作辅助!四川途游辅助软件下载... 操作辅助!四川途游辅助软件下载(辅助挂)一直是真的有辅助挂(发现有挂)1、游戏颠覆性的策略玩法,独创...