c#入门-objtct的方法

news2024/9/20 11:01:56

声明类型的基类

c#中的类都继承自object类,包括静态类。
静态类只是无法手动指定继承类型,而声明静态类时的关键字class,已经让他派生自object类了。

结构类型继承自ValueType类,而ValueType继承自object类。
数组继承自Array类,Ayyar类继承自object类。

c#中几乎所有类型都继承自object类。
大多数没有继承object类型的类都是作为变量时声明的类型,
例如接口,例如泛型占位符。
这些类型都是使用特殊手段翻定义才翻出来他们的根本没有到object的继承关系。
这种东西不重要,只是编译阶段的类型,不是运行阶段的类型。他们是可以赋值给object类型的变量的。

而无法赋值给object的值,目前我只找到指针类型。
在这里插入图片描述

object的方法

既然几乎所有类型都继承自object,那么我们应该了解一下object的方法。

ToString

这个方法决定了一个类如何转为字符串。
这是一个虚方法,你可以自己决定如何实现它。
他的默认实现是输出GetType的ToString。也就是直接输出类型的完全限定名。

class Fight
{
	public int Hp;
	public int Atk;
	public int Def;
	public override string ToString()
	{
		return $"HP:{Hp},Atk:{Atk},,Def:{Def}";
	}
}

Equals

Equals是一个相等判断的方法,用于判断目标值和自己是否一样。
这个方法和==有什么区别,区别是他们就是两个东西。

你可以重写并利用Equals方法,也可以重载并使用==进行判断。
在一般情况下,只会编写其中一种方法,而另一种方法会直接调用编写好的方法。

在模式匹配和查询表达式中,使用is和equals关键字。
这个的意义是告诉你,你重写的东西没用。我要把他以object的Equals进行判断。

另外,在ValueType类型中,Equals方法被重写了。
他会先判断自己和目标类型是否一样,然后使用反射判断所有的字段是否一样。
反射是非常消耗性能的,所以在声明结构的时候,建议重写Equals方法。

class Fight
{
	public int Hp;
	public int Atk;
	public int Def;
	public override bool Equals(object obj)
	{
		return obj is Fight other 
			&& Hp == other.Hp 
			&& Atk == other.Atk
			&& Def == other.Def;
	}
}

GetHashCode

这个方法决定了一个类如果获取他的哈希值。也是一个虚方法。
哈希值是一个普通的int类型。任何类都可以转为string,那要求任何类都可以转为int也很合理吧。

哈希值算是一种特征码。一个类有不同值的时候,结果尽量不同。
并且如果一个类在Equals判断为相等时,要求得到同样的哈希值。

并且尽量均匀覆盖所有的int。
比如记录人的生日取哈希值的时候,如果取年份那就补不均匀了。
活着的人全挤在1900-2100之间。并且1980-2010之间的数字特别多。

如果取月份,那就有点均匀了。但月也有大月和小月的区分,特别是2月最少。
所以,这个方法对怎样取值没用硬性规定。你应该结合你的类的字段,自己做出判断。

GetType

GetType不是虚方法,不能重写。
这个方法用于获得在反射时使用的,类的类型。
反射大致是一种让已经编译好的程序,回过头来看源码的功能。
但只能看到类成员的声明和定义。

而GetType就是看到这个类型的定义。
这个方法不能重写所以不会骗人。

例如有一种声明类型的方法是这样的

using System.Security.Cryptography;
MD5 md5= MD5.Create();

他不使用传统的new MD5()构造器的方式。
如果使用构造器那一定会得到MD5类型。

但使用静态方法就不一定了。他可能先调用了new MD5,
然后改了一些值。如果无法成功就给你一个null。
又或者他挑了一个继承自MD5的派生类,用多态的方式假装给你一个MD5。

Console.WriteLine(md5.GetType().Name);

用GetType可以看到他真正的类型,果然不是MD5。

MemberwiseClone

这个方法是一个protected方法,不能被外部调用。他也不能被重写,只是给你用的。
他的效果是获取当前类的浅拷贝,然后把这个复制的新对象给你。
不过由于是在object里声明的,而且不能重写,所以返回类型是object。
但放心,返回的值就是你这个类的类型,安心强转他。

class Tesk
{
	public Tesk Clone()
	{
		return (Tesk)MemberwiseClone();
	}
}

所谓浅拷贝,是指把所有字段全都复制一遍。
而我们说过,引用类型只是复制的话会窜号。
引用类型保存的是他的地址,或者说快捷方式。两份快捷方式打开的是同一份内容。

而深拷贝就是在遇到引用类型时递归这个过程,把引用类型也浅拷贝,如果里面还有引用类型继续浅拷贝。
这样一来,引用类型的内容和原来的内容一样,但不会窜号了。
但这个过程太过复杂,也只能用反射操作性能也低。
甚至要考虑出现循环引用的时候会不会出现bug。所以没给深拷贝的方法。

另外,值类型在赋值的时候,可能就是在自动调用这个方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/135233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript】本地存储(localStorage、sessionStorage、cookie)

文章目录【JavaScript】本地存储(localStorage、sessionStorage、cookie)一. 概念二. 本地存储特性三. 会话级存储四. 持久性存储五. cookie六. 本地存储的区别(1) cookie和storage的区别(2) localStorage和sessionStorage的区别七. 案例:记住用户名【JavaScript】本…

ansible(第二天)

第二章:模块介绍 1.Ansible的三个命令模块 command shell raw 应尽量避免使用这三个模块来执行命令,因为其他模块大部分都是幂等性的,可以自动进行更改跟踪。 command、shell、raw不具备幂等性。注: 幂等性:简单来…

【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

课程地址:《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期:sklearn入门 & 决策树在sklearn中的实现第二期:随机森林在sklearn中的实现第三期:sklearn中的数据预处理和特征工程第四期:sklearn中的降维算法…

vue3笔记案例——Suspense使用之骨架屏

文章目录skeleton组件sync组件Suspense使用skeleton组件 示例图 代码 <template><div class"sk"><div class"sk-2"><div class"sk-2-1"></div><div></div></div><hr><div class&qu…

亚马逊云科技 Build On -轻松搭建咖啡点单系统

【前言】 1、什么是Build On&#xff1f; Build On是亚马逊团队基于亚马逊云服务开发&#xff0c;打造的一系列可快速上手的实操性活动。通过通俗易懂的场景案例、简单快捷的开发路径&#xff0c;参与者可快速理解目标任务涉及的相关知识&#xff0c;同时对亚马逊云服务具备一…

【回答问题】ChatGPT上线了!推荐30个以上比较好的意图识别模型

【回答问题】ChatGPT上线了&#xff01;推荐30个以上比较好的意图识别github源码&#xff1f; 好的&#xff0c;这里列出 30 个相对比较优秀的意图识别 GitHub 源码&#xff1a; DeepPavlov Rasa Snips spaCy OpenAI GPT OpenAI DialogFlow ChatterBot Botpress Amazon Lex M…

ArcGIS基础实验操作100例--实验41提取道路面中心线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验41 提取道路面中心线 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1…

2022,我遭遇的那些小事

前言 2022&#xff0c;总感觉一晃眼就过去了&#xff0c;不知不觉自己坚持更文已经一周年了。回顾这一周年&#xff0c;无论是在技术成长上还是职业发展上&#xff0c;都有了许多新的体会。 裁员风波 还记得是四、五月份的一个上午&#xff0c;原本还在紧张的加班赶项目&…

educoder数据结构与算法 队列 第2关 实现一个链接存储的队列

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 目录 任务描述 相关知识 编程要求 测试说明 AC_Code 任务描述 本关任务&#xff1a;实现 step2/CLnkQueue.cpp 中的CLQ_IsEmpty、CLQ_Length、CLQ_In和CLQ_Out四个操…

论文阅读和复现:去除PPG运动伪影的IEEE论文

论文阅读和代码复现&#xff1a; 《Combining Nonlinear Adaptive Filtering and Signal Decomposition for Motion Artifact Removal in Wearable Photoplethysmography》 基本介绍&#xff1a; 由于手腕运动造成的噪声&#xff1a;运动伪影&#xff0c;使得PPG方法的心率监…

shell-流程控制之条件判断

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 补充&#xff1a;20G20971520kb [rootcotenos day06]# pwd /root/shell/day06 [rootcotenos day06]# vim free_men.sh #!/bin/bash f…

spring boot启动环境的配置与更改(dev,local,pro)包含单元测试环境

文件类型介绍 properties 该文件是一种key-value的格式&#xff0c;配置文件的特点是&#xff0c;它的Key-Value一般都是String-String类型的&#xff0c;因此我们完全可以用Map<String, String>来表示它。 用Properties读取配置文件非常简单。Java默认配置文件以.pro…

elasticsearch 7.9.3知识归纳整理(二)之es基本原理及使用kibana操作es的常见命令

es基本原理及使用kibana操作es的常见命令 一、es的基本原理与基础概念 1.1 倒排索引 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值&#xff0c;而是由属性值来确定记录…

【机器学习】机器学习中常用的损失函数一览

问题 机器学习中常用的损失函数总结 前言 我们经常听到损失函数、代价函数和目标函数这三种说法&#xff0c;这三种说法有什么联系和区别呢&#xff1f;这里明确下&#xff1a; 损失函数 Loss Function 通常是针对单个训练样本而言的&#xff0c;给定一个模型输出 y^\hat{y…

设计模式 - UML类图

1. 什么是 UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统图形化、能表达软件设计中的动态与静态信息。L从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图部署…

8种数据结构

快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算…

【回答问题】ChatGPT上线了!有哪些3D点云算法模型?3D点云算法模型实现代码?

有哪些3D点云算法模型&#xff1f; 3D点云算法的模型有很多种&#xff0c;以下是一些常见的算法模型&#xff1a; 归一化重心法&#xff08;Normalized point-to-point ICP&#xff09;&#xff1a;是一种常用的模型配准方法&#xff0c;用于将两个模型中的点匹配起来。 基于…

跨年晚会前夕,曹云金和前妻复合了

每到跨年晚会的时候&#xff0c;总会有大的新闻事件发生&#xff0c;比如说在今年跨年晚会前夕&#xff0c;主持人何炅的老父亲&#xff0c;就非常不幸地驾鹤西去了。话说主持人何炅&#xff0c;在父亲离开后坚强地主持节目&#xff0c;他泪眼婆娑的表情&#xff0c;也登上了各…

电子游戏销售之回归模型与数据可视化

电子游戏销售之回归模型与数据可视化 文章目录电子游戏销售之回归模型与数据可视化0、写在前面1、回归模型1.1 模型建立准备1.2 建立模型1.3 模型分析2、数据可视化3、参考资料0、写在前面 该篇文章的任务包括以下3个方面 检测与处理缺失值建立回归模型数据可视化 实验环境 Pyt…

我的2022年总结

我的2022年总结 行走于世&#xff0c;风大时要表现逆的风骨&#xff0c;风小时要表现顺的悠然。 我们可以转身&#xff0c;但是不必回头&#xff0c;即使有一天你发现自己走错了&#xff0c;你也应该转身大步朝着对的方向去&#xff0c;而不是回头埋怨自己错了。 一、旧事 …