.NET中Object的内存开销是多少?我在谈论一个任意的简单对象......内部.NET工作或引用的开销:
var obj = new System.Object();
Run Code Online (Sandbox Code Playgroud)
obj在堆中占用了多少空间?
关于如何管理强类型泛型的内存,我有疑问
List<int> ints1 = new List<int>();
ints1.Add(1); ints1.Add(2); ints1.Add(3);
int[] ints2 = new int[10]();
ints2.Add(6); ints2.Add(7); ints2.Add(8);
Run Code Online (Sandbox Code Playgroud)
问题1:我假设因为ints1初始化了一个新的关键字(new List<int>())它成为一个引用类型.值1,2,3在哪里存储在内存中(它们存储在堆栈中还是堆栈中)?
问题2:我知道之间的事情List<int>和int[],List<int>可以扩展它的大小为任意大小在运行时,它被限制在int[]编译时.因此,如果值1,2,3存储在堆栈中,如果添加一个新项目List<int>说4,它将不会连续到前3个右侧,那么ints1将如何知道4的内存位置?
这可能是重复的,但我找不到类似的问题.我不明白如何在没有数据丢失的情况下对基类型进行隐式转换.例如,我创建了这个类Person:
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,当我做以下时:
object personAsObject = new Person { Name = "Foo", Age = 1 };
var person = (Person) personAsObject;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Run Code Online (Sandbox Code Playgroud)
怎么样object能够保持属性的值Name,并Age因为它只有4种方法Equals,GetHashCode,GetType和ToString?为什么对子类的强制转换会抛出InvalidCastException?我希望这是可能的,因为如果成员不是私人的,那么他们就会被继承.