C# 是System.object本身是原语吗?

C# 是System.object本身是原语吗?,c#,C#,我看到很多人在谈论C#中的继承,就像原始类型是从System.Object派生的一样,它们有时传递整数、字符串。。。将对象作为方法的参数。我脑子里有几个问题把我弄糊涂了 1) System.Object本身是基元类型吗 据我所知,派生类是基类的复杂版本 2) System.Object如何捕获方法中的参数(string,int…) public void objcttest(object objct) { if(objct is string) var strng = (st

我看到很多人在谈论C#中的继承,就像原始类型是从System.Object派生的一样,它们有时传递整数、字符串。。。将对象作为方法的参数。我脑子里有几个问题把我弄糊涂了

1) System.Object本身是基元类型吗

据我所知,派生类是基类的复杂版本

2) System.Object如何捕获方法中的参数(string,int…)

public void objcttest(object objct)
{
   if(objct is string)
       var strng = (string)objct;
}
3) 使用上图中定义的类,这意味着什么

Object objct = new WorkItem(); // how is the object of the base class type instantiated with derived class type
1) system.object本身是基元类型吗

编号来自
类型.IsPrimitive

基本类型有布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、IntPtr型、UIntPtr型、字符型、双精度型和单精度型

System.object如何在以下方法中捕获参数(string,int…)

public void objcttest(object objct)
{
   if(objct is string)
       var strng = (string)objct;
}
每个非指针类型都会转换为
对象

如何使用派生类实例化类型基类的对象

事实并非如此。您需要区分三件事:

  • 变量(
    objct
    ,在您的示例中)
  • 引用(只是获取对象的一种方式)
  • 对象本身
objct
的值只是一个参考。其思想是,您可以将“派生类型”类型的表达式转换为其基类型(或其实现的接口),而无需实际更改引用本身

这基本上是.NET中多态性的根源——这个话题太大了,无法在这里进行真正的解释;我强烈建议您阅读一本关于C#的介绍性书籍,以便在此基础上打好基础

1) system.object本身是基元类型吗

编号来自
类型.IsPrimitive

基本类型有布尔型、字节型、SByte型、Int16型、UInt16型、Int32型、UInt32型、Int64型、UInt64型、IntPtr型、UIntPtr型、字符型、双精度型和单精度型

System.object如何在以下方法中捕获参数(string,int…)

public void objcttest(object objct)
{
   if(objct is string)
       var strng = (string)objct;
}
每个非指针类型都会转换为
对象

如何使用派生类实例化类型基类的对象

事实并非如此。您需要区分三件事:

  • 变量(
    objct
    ,在您的示例中)
  • 引用(只是获取对象的一种方式)
  • 对象本身
objct
的值只是一个参考。其思想是,您可以将“派生类型”类型的表达式转换为其基类型(或其实现的接口),而无需实际更改引用本身


这基本上是.NET中多态性的根源——这个话题太大了,无法在这里进行真正的解释;我强烈建议您阅读一本关于C的介绍性书籍,以便对此有一个良好的基础。

这是一个措词相当混乱的问题……太宽泛了。你应该把它们分成3个问题(这里已经回答了2和3个问题)。首先要回答的是,对象不是基本类型(如int、bool等少数基本类型是-type。IsPrimitive()提供了这一点)。请查找有关C#和引用类型的教程。@HenkHolterman我浏览了很多网页,但没有找到我的答案。您可以推荐什么,请执行。这一措辞相当混乱……问题太广泛。你应该把它们分成3个问题(这里已经回答了2和3个问题)。首先要回答的是,对象不是基本类型(像int、bool等少数基本类型是-type。IsPrimitive()提供了这一点)。查找有关C#和引用类型的教程。@HenkHolterman我浏览了很多次,但都没有找到我的答案。你可以推荐什么,请去做。我不知道你是如何得到真正好的答案的,即使这个问题很糟糕。@skeet谢谢,但我们怎么说int,字符串是System.object的派生,因为它们是基元。@Irfan:Well
string
不是一个起始基元(请参见列表)。但它们是值类型。更重要的是,它们可以通过装箱转换为
System.Object
,并以这种方式继承成员。但您应该真正了解值类型和引用类型是如何存储的。我建议您通过C#阅读CLR。非常感谢@skeet,但如果您能通过C#推荐一个正确的CLR位置,而不是Msdn,请这样做。@Irfan:是的,亚马逊。(这是一本书。)我不知道你是如何得到真正好的答案的——即使这个问题很糟糕。@skeet谢谢,但是我们怎么说int,string是System.object的派生词,因为它们都是原语。@Irfan:嗯
string
不是一个原语(见列表)。但它们是值类型。更重要的是,它们可以通过装箱转换为
System.Object
,并以这种方式继承成员。但您应该真正了解值类型和引用类型是如何存储的。我建议您通过C#阅读CLR。非常感谢@skeet,但如果您能通过C#推荐一个正确的CLR位置,而不是Msdn,请这样做。@Irfan:是的,亚马逊。(这是一本书。)