【问题标题】:Is it ok to have a class inside a struct?在结构内有一个类可以吗?
【发布时间】:2019-04-05 23:41:51
【问题描述】:

在 C# 中,结构存储在堆栈中,而类存储在堆中。想象一下,如果我有一个包含一个巨大类的结构。这将如何运作?结构是否只包含一个指向类的指针,而不管类的大小?还是类的大小也会影响结构体的大小?

如果前者是真的,那么我想在结构内有一个类是可以的。如果后者是真的,那我认为我应该避免这样做。

【问题讨论】:

标签: c# class struct


【解决方案1】:

如果你说“有一个巨大的班级”,你的意思是

class HugeClass { ... }

struct MyStruct {

    public HugeClass hugeClass;

}

那么hugeClass 字段自然包含对HugeClass 类型对象的引用,因为类是引用类型。不管实际的对象有多大,引用永远只是一个引用,所以被引用的对象分配的大小无关紧要。

【讨论】:

  • 嗯好的。我只是尝试这样做以查看“MyStruct”的大小。我使用的方法是:System.Runtime.InteropServices.Marshal.SizeOf(typeof(MyStruct))。当 HugeClass 中有 1 个 int 时,给定方法的答案与 HugeClass 中有 2 个 int 时不同。对此有何解释?
  • 无法复制:dotnetfiddle.net/ACJvNi。附带说明,SizeOf(Type) 在 4.5.1 中已过时。
  • 我明白了,是的。我使用了这个在线编译器:tutorialspoint.com/compile_csharp_online.php,这就是我想知道这个问题的原因
  • 我刚刚在 Visual Studio 中尝试过。看来你是对的,我使用的编译器可能有缺陷。
  • 那是一个Mono编译器,所以差异可能是由它引起的。但是,我对 Mono 一无所知,所以我不知道到底发生了什么。
猜你喜欢
  • 2010-09-09
  • 2020-02-13
  • 2010-10-09
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
相关资源
最近更新 更多