C# - 系统类 - Object类
Object类
ns:System
此类是所有.NET Framework中的类的基类 Type类就派生自Object类 C#提供了object关键字来表示一个类实例的类型 而无需使用Object作为类实例的类型声明
Object类的方法
ReferenceEquals静态方法
比较两个参数代表的对象是否引自托管堆的同一个对象的地址 如果是 返回true 此方法只比较引用类型的对象 如果你使用此方法比较值类型 则永远返回false 因为两个值类型在装箱成object后 永远不可能是托管堆上的同一个地址
Person person1 = new Person(); Person person2 = new Person(); bool result=object.ReferenceEquals(person1,person2)//return false bool result=object.ReferenceEquals(null,person1)//return false ; ; bool result=object.ReferenceEquals(i, z);//return false Person person3=person1 bool result=object.ReferenceEquals(person1,person3)//return true bool result=object.ReferenceEquals(null,null)//return true
Equals方法
此方法的运算比较复杂 它可以比较两个参数代表的对象是否引自托管堆的同一个对象的地址 也可以比较值类型的变量的值是否相等 还可以在派生类中重写Equals方法 重写可以按照自定义的逻辑来比较对象
double i = 10.1; double z = 10.1; bool result=object.Equals(i, z);//return true Person Person1 = new Person(); Person Person2 = new Person(); bool result = object.Equals(Person1, Person2);//return false
我们可以在派生类中重写Equals方法 以实现自定义的比较 比如可以比较两个对象的ID属性是否相等 如
public partial class Person
{
private string name;
private int id;
public string Name { get { return name; } set { name = value; } }
public int ID { get { return id; } set { id = value; } }
public override bool Equals(object obj)
{
if (obj is Person)
{
Person otherPerson = (Person)obj;
return otherPerson.id == id;
}
return false;
}
}
static void Main(string[] args)
{
Person Person1 = new Person();
Person1.ID = ;
Person Person2 = new Person();
Person2.ID = ;
bool result = Person1.Equals(Person2);//return true
}
Object的Equals方法本来是比较两个参数代表的对象是否引自托管堆的同一个对象的地址 如果是这样 则这个例子应该返回false 但实际上它会返回true 因为经过Person类对基类Equals的重写 该方法的行为变成了比较两个对象的ID属性值是否相等 所以结果为true
Equals静态方法
与Equals实例方法有相同的行为 唯一区别是 无法重写 最后注意 如果调用此静态方法比较两个对象 假设被比较的对象是同一种类型且该类型重写了实例Equals方法 则静态Equals方法会按照实例Equals方法的行为来处理比较 比如上个例子中的Person类重写了实例Equals方法 此时如果我们是由静态Equals来比较两个Person类对象 它将根据Person重写的实例Equals来比较两个Person对象的ID是否相等而非比较对象是否引自同一个托管堆的地址
Person Person1 = new Person(); Person1.ID = ; Person Person2 = new Person(); Person2.ID = ; bool result = object.Equals(Person1,Person2);//return true
如果我们将Person重写的实例Equals方法的代码删除 则结果会返回false
GetHashCode方法
获取对象的哈希码 可重写
GetType方法
获取对象的类型
ToString方法
获取对象的完全限定名称的字符表示 这是该方法的默认行为 可被重写以实现提供类型的详细信息
C# - 系统类 - Object类的更多相关文章
- Java的常用类——Object类、String类
Java的JDK中提供给我们很多封装好的类就是Java API,可以直接调用. Java 的API(API: Application(应用) Programming(程序) Interface(接口) ...
- Java中特殊的类——Object类
Java中特殊的类--Object类 1.Object类的概述 Object类是java默认提供的类.Java中除了Object类,所有的类都是有继承关系的.默认会继承Object类,即所有的对象都可 ...
- Java基础之Java常用类--Object类,字符串相关类,包装类,日期相关类,数字相关类
Java是一种面向对象的语言,也就是将万事万物可以描述为对象,特点如下: 1.面向对象是常见的一种思考习惯,符合人们的思考习惯.2.面向对象的出现,将复杂的事情简单化.3.面向对象的出现,将之前过程中 ...
- Java常用类-Object类
一.java.lang.Object类 1.Object类是所有Java类的根父类 2.如果在类的声明中未使用extends关键字指明其父类,则默认父类为java.lang.Object类 3.Obj ...
- Java.lang 包 (包装类、String类、Math类、Class类、Object类)
Java 的核心 API(Application Programming Interface)是非常庞大的,这给开发者带来了很大的方便. java.lang 包是 Java 的核心类库,它包含了运行 ...
- Object类-try-catch-finally-throw-throws-自定义异常
一.Object类 Object类是最顶端的类,其它类都是它的子类,它的方法可以被继承.如果定义的类没有继承别的类,那它的直接父类就是Object.如果方法参数类型为object类型, 则调用 ...
- java学习记录笔记--继承,super,Object类
继承: Java中的继承是单继承的. 1.子类拥有父类的全部属性和方法. 可是属性和方法的修饰符不能使private. 2.能够复用父类的代码. 方法的重写须要满足的条件: a.返回值类型 b.方法名 ...
- JAVASE(十)面向对象:特性之多态性、Object类、代码块、关键字:static、final、父子类执行顺序
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.面向对象的特性之:多态性 多态性的理解:事物的多种形态 1.1 广义上多态性的体现:①方法的重写,重 ...
- JDK1.8源码阅读笔记(1)Object类
JDK1.8源码阅读笔记(1)Object类 Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...
随机推荐
- ANDROID_MARS学习笔记_S01原始版_010_ContentProvider
一.简介 一.代码1.xml(1)main.xml <?xml version="1.0" encoding="utf-8"?> <Linea ...
- Altium Designer学习:PCB只看当前层
1 Shift+S 这个快捷键能高亮当前层,并且使其他层变成灰色,见下图: 2 隐藏指定层 在图中右下角的地方,右键,会弹出一个选项条,选择Hide Layers,可以选 ...
- QT4项目升级到QT5遇到的问题和解决方法
QT4升级到QT5改动: PC部分: [改QTDIR变量] 在工程根目录下找到.user文件, 如InnoTabPlugin.vcxproj.user 修改指向你的QT5根目录: <Proper ...
- OTG
OTG技术就是在没有Host的情况下,实现设备间的数据传送.例如数码相机直接连接到打印机上,通过OTG技术,连接两台设备间的USB口,将拍出的相片立即打印出来:也可以将数码照相机中的数据,通过OTG发 ...
- Android开发UI之去掉title bar
去掉屏幕上的title bar有3个方法: 1.java代码实现: @Override publicvoid onCreate(Bundle savedInstanceState) { super.o ...
- keytool 错误: java.io.FileNotFoundException: 拒绝访问
keytool 错误: java.io.FileNotFoundException: 拒绝访问 打开命令行,切换到D:\AndroidStudioProjects\MyApplication\app目 ...
- bzoj2282
到路径的距离就是到路径上的点最近的距离首先看到最大值最小不难想到二分答案下面的问题就是怎么判断,显然我们是不能穷举路径的我们要找出消防路径的性质仔细研究就会发现消防路径一定是树的直径的一段,这样必然最 ...
- CSS clip:rect矩形剪裁功能及一些应用介绍
CSS clip:rect矩形剪裁功能及一些应用介绍 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...
- BrnShop开源网上商城第一讲:架构设计
首先在此感谢大家对BrnShop项目的支持和鼓励!我们在发布BrnShop以前曾推测项目会受到不少园友的支持,但没想到园友们的支持大大超过我们的预测.4天6000次浏览,140个推荐,170个评论,8 ...
- 我的iOS开发之路
我终于开始写我的第一个cocos2d-iphone程序了.纪念一下 额,这是一个悲伤的故事.其实我从开始准备开发iOS已经好久了,从我装上Xcode开始到现在,应该已经有差不多一年的时间了把. 还记得 ...