当前位置: 首页 > news >正文

哈尔滨制作企业网站产品开发过程

哈尔滨制作企业网站,产品开发过程,安徽建设教育协会网站,广州企业如何建网站翻译自 Manju lata Yadav 2019年6月2日 的博文 《Difference Between Struct And Class In C#》#xff0c;补充了一些内容和示例。结构体#xff08;struct#xff09;是类(class)的轻量级版本。结构体是值类型#xff0c;可用于创建行为类似于内置类型的对象。比较结构体… 翻译自 Manju lata Yadav 2019年6月2日 的博文 《Difference Between Struct And Class In C#》补充了一些内容和示例。结构体struct是类(class)的轻量级版本。结构体是值类型可用于创建行为类似于内置类型的对象。比较结构体和类共享许多特性但与类相比有以下局限性。结构体不能有默认构造函数(无参构造函数)或析构函数构造函数中必须给所有字段赋值。 public struct Coords{public double x;public double y;public Coords() //错误不允许无参构造函数{this.x 3;this.y 4;}public Coords(double x) //错误构造函数中必须给所有字段赋值{this.x x;}public Coords(double x) //这个是正确的{this.x x;this.y 4;}public Coords(double x, double y) //这个是正确的{this.x x;this.y y;}} 结构体是值类型在赋值时进行复制。结构体是值类型而类是引用类型。结构体可以在不使用 new 操作符的情况下实例化。例如 public struct Coords{public double x;public double y;}static void Main(){Coords p;p.x 3;p.y 4;Console.WriteLine($({p.x}, {p.y})); // 输出: (3, 4)} 结构体不能继承于另一个结构体或者类类也不能继承结构体。所有结构体都直接继承于抽象类 System.ValueTypeSystem.ValueType 又继承于 System.Object。结构体不能是基类因此结构体不能是 abstract 的且总是隐式密封的(sealed)。不允许对结构体使用抽象abstract和密封sealed修饰符也不允许对结构体成员使用 protected 或 protected internal 修饰符。结构体中的函数成员不能是抽象的abstract或虚的virtual重写override修饰符只允许重写从 System.ValueType 继承的方法。结构体中不允许实例属性或字段包含初始值设定项。但是结构体允许静态属性或字段包含初始值设定项。例如 public struct Coords{public double x 4; //错误, 结构体中初始化器不允许实例字段设定初始值public static double y 5; // 正确public static double z { get; set; } 6; // 正确} 结构体可以实现接口。结构体可以用作 nullable type即NullableT 中的 T对其赋值 null 值参考【NullableT Struct https://docs.microsoft.com/en-us/dotnet/api/system.nullable-1?viewnetcore-3.1】什么时候使用结构体或类要回答这个问题我们应该很好地理解它们的差异。序号结构体struct类(class)1结构体是值类型可以在栈stack上分配也可以在包含类型中内联分配。类是引用类型在堆heap上分配并垃圾回收。2值类型的分配和释放通常比引用类型的分配和释放更节约成本。大的引用类型的赋值比大的值类型的赋值成本更低。3在结构体中每个变量都包含自己的数据副本ref 和 out 参数变量除外对一个变量的操作不会影响另一个变量。在类中两个变量可以包含同一对象的引用对一个变量的任何操作都会影响另一个变量。这样结构体struct只能在确定以下情形时使用它在逻辑上表示单个值比如基本类型(int, double等等)。它是不可变的immutable。它不会频繁地装箱和拆箱。在所有其他情形应该将类型定义为类(class)。结构体示例struct Location {public int x, y;public Location(int x, int y){this.x x;this.y y;} }static void Main() {Location a new Location(20, 20);Location b a;a.x 100;Console.WriteLine(b.x); } 输出将是 20。“b” 的值是 “a” 的副本因此 “b” 不受 “a.x” 更改的影响。但是在类中输出将是 100因为变量 “a” 和 “b” 引用同一个对象。以下为译者补充结构体实例与类实例结构体实例的内存在栈stack上进行分配所占用的内存随声明它的类型或方法一起回收。这就是在赋值时要复制结构体的一个原因。相比之下类实例的内存在堆heap上进行分配当对类实例的所有引用都超出范围时为该类实例分配的内存将由公共语言运行时自动回收垃圾回收。结构体实例的值相等性两个结构体实例的比较是基于值的比较而类实例的比较则是对其引用的比较。若要确定两个结构体实例中的实例字段是否具有相同的值可使用 ValueType.Equals 方法。由于所有结构体都隐式继承于 System.ValueType因此可以直接在其对象上调用该方法如以下示例所示public struct Person {public string Name;public int Age;public Person(string name, int age){Name name;Age age;} }static void Main() {Person p1 new Person(技术译站, 100);Person p2;p2.Name 技术译站;p2.Age 100;if (p2.Equals(p1))Console.WriteLine(p2 和 p1 有相同的值。);Console.ReadKey(); } // 输出: p2 和 p1 有相同的值。 System.ValueType 的 Equals 是使用反射实现因为它必须能够确定任何结构体中有哪些字段。在创建自己的结构体时重写 Equals 方法可以提供特定于你的类型的高效求等算法。“基于值的相等”这一点和 C# 9.0 中新增的记录(record) 类型具有相似之处想了解 C# 9.0 可以查看欢迎来到 C 9.0。作者  Manju lata Yadav 译者 技术译民出品 技术译站https://ITTranslator.cn/
http://www.pierceye.com/news/12569/

相关文章:

  • 微信公众号绑定网站楚雄做网站
  • 建网站要多少钱一台网站建设开发的条件
  • 北京金融网站建设建筑工程有限公司招聘信息
  • 诺盾网站建设电脑城网站开发需求分析
  • 免费网页游戏在线玩上海搜索引擎优化1
  • php网站建设入门教程河南郑州网站设计公司
  • 济南营销网站制作公司哪家好沈阳网站设计制作公司
  • python做的网站漏洞一个网站seo做哪些工作内容
  • 许昌做网站九零后关键词怎么优化
  • 怎么做网站导航一个网站的建设步骤
  • 哪个网站服务器比较好网站建设需要钱吗
  • wordpress可以放视频吗网站评价及优化分析报告
  • 电子商务网站建设与运维论文网站后台发了文章看不到
  • 做网站的是哪类公司网站更换域名注意事项
  • 局网站建设总结wap网站是什么意思
  • 网站网站建设专业网站站内推广怎么做
  • 在线做网站教程上海制作企业网站
  • 珠海网站设计公司潍坊建设网站公司电话
  • 网站seo课设云虚拟主机免费
  • 北京城乡建设网站首页网站二级目录怎么做
  • 网站建设设计平台网页类网站
  • mysql php网站开发网站建设前端和后端的区别
  • 东莞网站建设环保设备有没有做门店设计的网站
  • 誉铭摄影网站北京网络推广平台
  • 做学校网站用什么模版国外便宜的云服务器
  • 如何seo搜索引擎优化廊坊视频优化方案
  • 网站设计背景图片怎么做的新开传奇网站曾劲松
  • 乐从容桂网站建设网站建设项目的预表
  • 小牛门户网站伪原创php网站镜像同步程序
  • 深圳移动网站建设公司什么是百度快照