相关疑难解决方法(0)

.net中的每个类型都继承自System.Object吗?

这可能是一个非常基本的问题,但我对它有点困惑.如果我反映Int32/Double/any值类型代码,我看到它们是结构体,如下所示:

[Serializable, StructLayout(LayoutKind.Sequential), ComVisible(true)]
public struct Double : IComparable, IFormattable, IConvertible, IComparable<double>, IEquatable<double>
{
....
}
Run Code Online (Sandbox Code Playgroud)

那么,为什么我们说.NET中的所有内容都是从System.Object派生的.我想在这里缺少一些关键点.

编辑: 让我更加困惑的是,作为结构的值类型如何从System.Object继承,这是一个类.

.net c#

28
推荐指数
2
解决办法
1万
查看次数

调用值类型的方法会导致在.NET中装箱吗?

我只是参与Stack Overflow问题.NET中的所有内容都是对象吗?.

并且一张海报(在接受的答案的评论中)似乎认为对值类型执行方法调用导致拳击.他向我指出了Boxing和Unboxing(C#编程指南),它没有明确指出我们描述的用例.

我不是一个信任单一来源的人,所以我只是希望得到关于这个问题的进一步反馈.我的直觉是没有拳击,但我的直觉确实很糟糕.:d

进一步阐述:

我使用的例子是:

int x = 5;
string s = x.ToString(); // Boxing??
Run Code Online (Sandbox Code Playgroud)

如果有问题的结构覆盖从对象继承的方法,则不会发生拳击,如此处所接受的答案所述.

但是,如果结构不覆盖该方法,则在callvirt之前执行"约束" CIL命令.根据文档,OpCodes.Constrained Field,这导致拳击:

如果thisType是一个值类型而thisType没有实现方法,则ptr被解除引用,装箱,并作为'this'指针传递给callvirt方法指令.

.net boxing value-type

24
推荐指数
3
解决办法
2584
查看次数

类的字段,它们是存储在堆栈还是堆中?

我昨天看到了一个问题(对我来说)另一个问题.请看下面的代码:

public class Class1
{
   int A; //as I uderstand, int is value type and therefore lives in the stack
}

class Class2
{
    Run()
   {
       Class1 instance1 = new Class1();
       instance1.A = 10;  //it points to value type, but isnt this reference (on heap)?
   }
}
Run Code Online (Sandbox Code Playgroud)

或者在创建Class1的实例时,它的字段类型也在堆上创建?但后来我不明白什么时候它真的会在堆栈上,因为几乎总是你需要创建一个对象实例才能使用它.

c# heap stack memory-management

23
推荐指数
2
解决办法
1万
查看次数

为什么C#号码类型是不可变的?

为什么ints和doubles不可变?每次要更改值时返回新对象的目的是什么?

我问的原因是因为我正在创建一个类:BoundedInt它有一个值和一个上限和下限.所以我想知道:我是否应该使这种类型不变?(或者它应该是struct?)

c# types immutability

18
推荐指数
3
解决办法
6211
查看次数

寻找纯面向对象的语言

我认为面向对象编程被高估了,但我想学习这个范例.我一直在尝试使用QT 4在PHP 5和C++中执行此操作.不幸的是,我倾向于以结构化方式编程,我不使用很多继承也不使用多个实例.我想我必须学习一种纯粹的面向对象语言,迫使我使用上述功能.

我认为最好的选择可能是学习Ruby.您能否确认或命名更好的替代方案?

我主要在x86-64 Linux上工作.

oop programming-languages

17
推荐指数
8
解决办法
2万
查看次数

在C#中,值类型是可变的还是不可变的?

值类型行为表明,我们持有的任何值都无法通过其他变量进行更改.

但是我仍然对我在这篇文章标题中提到的内容感到困惑.任何人都可以澄清吗?

c# value-type reference-type

15
推荐指数
1
解决办法
9686
查看次数

声明,实例化,初始化和分配对象的含义

从技术上讲,在C#中声明,实例化,初始化分配对象的术语的含义和区别是什么?

我想我知道分配的意思,但我没有正式的定义.

在msdn中,有人说"创建对象的行为称为实例化".但创造的意义对我来说似乎含糊不清.你可以写

int a;
Run Code Online (Sandbox Code Playgroud)

a随后产生的?

c# terminology

15
推荐指数
2
解决办法
2万
查看次数

值类型继承自System.Object ...为什么?

可能重复:
.NET中的所有内容都是对象吗?
ValueTypes如何从Object(ReferenceType)派生而仍然是ValueTypes?

嗨,我只是不明白.System.Object是(我认为)引用类型,但.NET中的所有数据类型都继承自它.值类型也是如此.我不明白它 - 值类型在堆栈上有它的值,但它继承自Object?希望有人能帮助我理解

c# types object

14
推荐指数
2
解决办法
8959
查看次数

这些对象是在堆栈上还是在堆上?

如果有人能告诉我我是否理解它,我真的很感激:

class X
{
   A a1=new A(); // reference on the stack, object value on the heap
   a1.VarA=5;    // on the stack - value type
   A a2=a1;      // reference on the stack, object value on the heap
   a2.VarA=10;   // on the stack - value type         
}
Run Code Online (Sandbox Code Playgroud)

此外a1,a2引用都在堆栈上,而它们的"对象"值在堆上.但是VarA变量,它仍然是纯粹的价值类型呢?

class A
{
   int VarA;
}
Run Code Online (Sandbox Code Playgroud)

c# stack memory-management

13
推荐指数
2
解决办法
3389
查看次数

在为整数类型调用ToString时是否涉及到装箱?

很简单的问题:

int a = 5;
string str = a.ToString();
Run Code Online (Sandbox Code Playgroud)

既然ToString是System.Object的虚方法,它是否意味着每次我为整数类型调用此方法时,会发生装箱?

.net c# boxing

11
推荐指数
2
解决办法
2401
查看次数