System.Object

    C#中全部的类都直接或间接继承自System.Object类,这使得C#中的类得以单根继承。假设我们没有明白指定继承类,编译器缺省觉得该类继承自System.Object类。System.Object类也可用小写的objectkeyword表示,两者全然等同。

    由于全部的类都继承与System.Object,所以这些类都能够訪问该类中受保护的成员和公共的成员。以下我们就一起来看看可使用的成员有哪些。



1.public Object()

    System.Object类型的构造函数,直接使用new Object()能够用来创建对象;假设非Object类型,则由派生类型的构造函数自己主动调用。



2.public virtual bool Equals(Object obj)

    把调用该方法的对象与还有一个对象相比,假设它们相等,就返回true。默认的实现代码会查看对象的參数是否引用了同一个对象(由于对象是引用类型)。假设想以不同的方式来比較对象,则能够重写该方法

    比如,比較两个对象的状态:public static bool Equals(Object objA,Object ObjB)

    静态方法Equals(object objA,object objB)首先检查两个对象objA和objB是否都为null,假设是则返回true,否则进行objA.Equals(objB)调用并返回其值。问题归结到实例方法Equals(object obj)。该方法缺省的实现事实上就是{return this= =obj;}也就是推断两个对象是否引用相等。

    该方法返回true的条件:objA和objB是同一个实例或着objA和objB都是null或者objA.Equals(objB)



3.public virtual int GetHashCode()

    用作对象的散列函数,这是一个必选函数,返回一个以压缩形式标识的对象状态的值。适用于哈希算法和诸如哈希表之类的数据结构。

    假设两个对象的比較结果相等,则每一个对象的 GetHashCode 方法都必须返回同一个值。可是,假设两个对象的比較结果不相等,则这两个对象的 GetHashCode 方法不一定返回不同的值。

    一个对象的 GetHashCode 方法必须总是返回同一个哈希代码,但前提是没有改动过对象状态,对象状态用来确定对象的 Equals 方法的返回值。请注意,这仅适用于应用程序的当前执行,再次执行该应用程序时可能会返回还有一个哈希代码。



4.public Type GetType()

    以System.Type对象的形式返回对象的类型

namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
MyBaseClass myBase=new MyBaseClass();
MyDerivedClass myDerived=new MyDerivedClass ();
object o=myDerived ;
MyBaseClass b=myDerived;
Console.WriteLine("mybase:Type is {0}",myBase.GetType ());
Console.WriteLine("myDerived:Type is {0}",myDerived .GetType ());
Console.WriteLine("object o=myDerived:Type is {0}",o.GetType ());
Console.WriteLine("MyCassClass b=myDerived:Type is {0}",b.GetType ());
}
}
public class MyBaseClass:object
{ }
public class MyDerivedClass:MyBaseClass
{ }

5.public static bool ReferenceEquals(Object objA,Object objB)

    这种方法比較传送给它的两个对象,看看他们是否是同一个实例的引用。假设objA与objB是同样的实例,或者假设二者都是为空引用,则为true;否则为false

class Program
{
static void Main(string[] args)
{
object o = null;
object p = null;
object q = new object();
Console.WriteLine(object.ReferenceEquals(o, p));
p = q;
Console.WriteLine(object.ReferenceEquals(p, q));
Console.WriteLine(object.ReferenceEquals(o, p));
}
}

6.protected Object MemberWiseClone()

    通过创建一个新对象实例并复制成员,以复制该对象。成员拷贝不会得到这些成员的新实例。新对象的不论什么引用类型成员都将引用于源类同样的对象,这种方法是受保护的,所以仅仅能在类或派生的类中使用

class MyDerivedClass:MyBaseClass
{
static void Main(string[] args)
{
MyDerivedClass m1 = new MyDerivedClass();
m1.age=42;
m1.name="Sam";
MyDerivedClass m2 = (MyDerivedClass)m1.MemberwiseClone(); Console.WriteLine(m2.name);
Console.WriteLine(m2.age);
}
} class MyBaseClass
{
public string name;
public int age;
}

7.public virtual string ToString()

    返回一个相应于实例的字符串。默认情况下,这是一个类类型的限定名称,但能够重写它,给类型提供合适的实现方式。默认情况下返回的是该对象所属类型的全名称。继承类能够重写该方法,以便自己定义显示输出内容,假设继承类须要控制很多其它格式化输出,则须要实现IFormattable接口

C# 之 System.Object的更多相关文章

  1. NotSupportedException-无法将类型“System.DateTime”强制转换为类型“System.Object”

    几张图就可以说明一切 2015-03-29 21:54:09,206 [77] ERROR log - System.NotSupportedException: 无法将类型“System.DateT ...

  2. 第4章 类型基础 -- 4.1 所有类型都从System.Object派生

    4.1 所有类型都从System.Object派生 “运行时”要求每个类型最终都从System.Object类型派生. 由于所有类型最终都从System.Object派生,所以每个类型的每个对象都保证 ...

  3. 类型与通用语言运行时:System.Object

    CLR 要求每个类型最终都要继承自 System.Object 类型 //隐式继承 Object class Employee { ... } //显示继承继承 Object class Employ ...

  4. 无法将类型“System.Nullable`1”强制转换为类型“System.Object”。LINQ to Entities 仅支持强制转换 EDM 基元或枚举类型。

    在一个项目中使用LINQ和EF时出现了题目所示的异常,搜索了很多资料都找不到解决办法,主要是因为EF方面的知识欠缺. 先将情况记录如下,以供以后参考. 查询主要设计两张表,由外键关联: 在进行下面的查 ...

  5. C# System.Object基类

    System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Objec ...

  6. System.Object简介

    Object中的公共方法解释: 公共方法: Equals: public class Object { public virtual Boolean Equals(Object obj) { //如果 ...

  7. The type 'System.Object' is defined in an assembly that is not referenced

    记录一个错误,报 The type 'System.Object' is defined in an assembly that is not referenced,[System.Runtime] ...

  8. c# System.Object类和数据的安全转型

    .NET Fraework 最重要的引用类型之一是System命名空间中Object类.所有的类都是System.Object的派生类.System.Object类型的变量System.Object的 ...

  9. System.Object

    Object():System.Object类型的构造函数,自动调用. ~Object()/Finalize():System.Object类型的祈构函数,自动调用且不能够手动. Equals(obj ...

随机推荐

  1. 关于java reflect

    反射的基石 Class类 对比提问: Person类代表人,它的实例对象就是张三,李四这样一个个具体的人, Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class.对比 ...

  2. 通过Servlet的response绘制页面验证码

    java部分 package com.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; ...

  3. PHP之路——Redis安装

    windows: redis下载链接:https://github.com/ServiceStack/redis-windows 然后编辑redis.windows.conf文件,我看网上有的教程说编 ...

  4. CSS样式的优先级

    1.相同权值情况下,CSS样式的优先级总结来说,就是--就近原则(离被设置元素越近优先级别越高): 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中). 2.权 ...

  5. 卷积神经网络 cnnff.m程序 中的前向传播算法 数据 分步解析

    最近在学习卷积神经网络,哎,真的是一头雾水!最后决定从阅读CNN程序下手! 程序来源于GitHub的DeepLearnToolbox 由于确实缺乏理论基础,所以,先从程序的数据流入手,虽然对高手来讲, ...

  6. C++中四种类型转换方式

    类型转换有c风格的,当然还有c++风格的.c风格的转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比 ...

  7. 【产品对比分析】See做了明星衣橱想做的东西?

    不断地发现.联想.思考,让学到的东西互通起来吧!  先来两张See的界面图镇楼——          See简介: See是一个专注找同款的时尚社区,主打功能是一键拍照找同款,由社区为你提供最佳商品或 ...

  8. websphere性能设置和日常维护

    一. 确认磁盘空间是否满足要求1. WebSphere 应用服务器自身代码的占用空间.这个空间一般在1G左右,在不同的系统平台上略有差异. 2. 概要文件所占的空间.WebSphere应用服务器V6. ...

  9. codeforces C. No to Palindromes!

    http://codeforces.com/contest/465/problem/C 题意:给你一个字符串,然后按照字典序找出下一个字符串,这个字符串中不能含有长度大于等于2的子串为回文串,如果含有 ...

  10. MySQL数据库事务隔离级别(Transaction Isolation Level)

    转自: http://www.cnblogs.com/zemliu/archive/2012/06/17/2552301.html  数据库隔离级别有四种,应用<高性能mysql>一书中的 ...