gpt4 book ai didi

c# - 我对类、对象和实例有点困惑

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:54 29 4
gpt4 key购买 nike

我读了很多关于类、对象和引用之间的区别的文章。但我有疑问。所以请帮我解决这个问题。假设

Class A        //declaration of class
{
//
}

main()
{
A s1 = new A();
A s2 = new A();
}

现在的问题是在上面的代码中,内存中有多少个不同的对象和实例。?

如果有人说有两个不同的对象和两个实例(即 s1 和 s2)那么如果我们在一个实例中改变假设 s1 那么它也反射(reflect)了 s2 的变化。这表明内存中只有一个对象。

那么我们如何在同一个类A的内存中创建不同的对象呢?

提前致谢!

最佳答案

在您的示例代码中,内存中有 2 个类 A 的实例。 s1s2 分别指向一个内存地址,其中有一个 A 实例。

使用词 objectinstance 往往意味着同一件事,因此您可以互换使用它们。

现在,如果你这样做:

main()
{
A s1 = new A();
A s2 = s1;
}

在这种情况下,s1s2 都指向相同的对象/实例(相同的内存地址)。因此,如果您对 s1s2 进行了更改,那么它们将以任何一种方式反射(reflect)出来。

编辑:

一点额外的解释......

main()
{
A s1 = new A();
}

在上面的代码中,变量s1被实例化为一个新的A实例。这里发生了两件事

  • A 的实例已在堆内存区域中创建。
  • s1 存储(在栈上)堆中的内存地址。

s1 将在堆栈上创建,它实际上是指向已创建 A 实例的堆中内存地址的指针。

希望这些额外的信息有助于澄清事情。

编辑:

您可以在 PC 内存允许的范围内创建尽可能多的实例。

main()
{
A s1 = new A();
A s2 = new A();
A s3 = new A();
// etc until you run out of memory.
}

我强烈建议您购买一些书籍来帮助您掌握 .NET 编程的基础知识。我最喜欢的书,也是我经常翻阅的一本书,它 CLR via C# 4th Edition .那本书不会出错。

关于c# - 我对类、对象和实例有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29072141/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com