对象类型变量如何接受类类型实例

时间:2013-10-15 06:21:09

标签: c#

我需要澄清一个对象类型变量如何接受下面代码片段中给出的类类型实例的事情,

class MyClass
{

}

static void Main()
{
   object obj = new MyClass();
}

由于MyClass不是一种对象,但仍然在obj(对象)变量中接受了MyClass的实例。

6 个答案:

答案 0 :(得分:3)

实际上,您的班级 是一个对象 在C#中,所有类都来自于对象。

引用一个类,因为它的基类型是Polymorphism的一种方式。

使用类比可能会更好地理解:
您的班级对象,就像狗动物一样。

此外,如果您尝试以下操作:

object obj = new MyClass();
bool isMyType = obj == typeof(MyClass);  //<--this will be true.

请查看this SO thread,了解有关多态性如何有用的更多信息。

答案 1 :(得分:2)

您不理解的概念是polymorphism,它基本上表示您可以在类之间定义is关系。对于一个简单的逻辑,每只狗都是动物,所以你可以拥有继承自Dog的类Animal。这意味着您可以为Animal类型的变量分配Dog的实例,但不是相反 - 不是每只动物都是狗。另一件事是,每件事物都来自形式对象,这是一种你认为理所当然的语言概念。

答案 2 :(得分:2)

c#中的Evry来自Object ... 甚至是你的班级。enter image description here

答案 3 :(得分:1)

.Net遵循OOPs(面向对象的编程语言),这里每个类都可以作为一个对象。每个类都继承Object class,因此每个类都可以充当对象。在您的示例中,.Net创建一个默认构造函数来创建类的实例。你绝对可以在那里编写自己的构造函数。

希望它有所帮助。

答案 4 :(得分:1)

C#中的所有内容都来自Object

甚至像struct(int,float,..)这样的值类型都是从Object类型派生的。


当您定义自己的类时,它隐式派生自Object类型。

docs

中提到了它
  

所有类,结构,枚举和委托都继承自   对象类

答案 5 :(得分:1)

MSDN:

支持.NET Framework类层次结构中的所有类,并提供低级别 派生类的服务。这是所有课程的最终基础 在.NET Framework中;它是类型层次结构的根。

继承层次结构:

所有类,结构,枚举和代理。

这意味着当您使用int.Parse()int投射某些值时,int类型后面会有一个类,这使得它可以拥有方法并执行此类操作。 Object几乎在.Net中无处不在。