【问题标题】:How do object type variables accept class type instance对象类型变量如何接受类类型实例
【发布时间】:2013-10-22 20:39:54
【问题描述】:

我需要澄清一个对象类型变量如何接受下面代码sn-p中给定的类类型实例,

class MyClass
{

}

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

由于 MyClass 不是对象类型,但 MyClass 的实例仍然在 obj(object) 变量中被接受。

【问题讨论】:

  • 每个类型都继承自对象,所以 MyClass 是一种对象。
  • Type 的意思,这里指的是 MyClass 对吧?它不是从对象派生的..
  • @Sankarann - 为什么你认为MyClass 不是源自Object
  • @Sankarann MyClass 隐式派生自对象,因为它是所有值和引用类型的基类
  • @Sankarann - 是的,它不见了。这既是福也是祸。因为每个类型都是从Object 派生的,所以您不需要显式地将Type : Object 放入其中。 C# 编译器会自动为您执行此操作。 (诅咒是:如果你不知道,可能会引起混乱)。我建议您阅读CLR via C#,这将使您深入了解“幕后”发生的事情。

标签: c#


【解决方案1】:

实际上,您的类一个对象。
在 C# 中,所有类都派生自对象。

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

打个比方可能会更好理解:
你的类是一个对象,就像 Dog 是一个动物一样。

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

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

查看this SO thread,了解多态性如何发挥作用的更多信息。

【讨论】:

    【解决方案2】:

    你不明白的概念是polymorphism,它基本上说你可以在你的类之间定义一个is 关系。对于一个简单的逻辑,每只狗都是动物,因此您可以拥有继承自 Animal 的类 Dog。这意味着您可以将Dog 的实例分配给Animal 类型的变量,但不能反过来——并非每只动物都是狗。另一件事是,每件事都派生自对象,这是您可以认为是理所当然的语言概念。

    【讨论】:

      【解决方案3】:

      c# 中的一切都源自Object... 甚至你的班级。

      【讨论】:

        【解决方案4】:

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

        希望对你有帮助。

        【讨论】:

          【解决方案5】:

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

          像 struct(int,float,..) 这样的值类型都派生自 Object 类型。


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

          docs中有提到

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

          【讨论】:

            【解决方案6】:

            MSDN:

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

            继承层次结构:

            所有类、结构、枚举和委托。

            这意味着当您使用int.Parse() 将某个值强制转换为int 时,int 类型后面有一个类,这使得它能够拥有方法并执行此类操作。 Object 在 .Net 中几乎无处不在。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-08-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多