C# 班级成员占用内存吗?

C# 班级成员占用内存吗?,c#,asp.net,.net,memory,C#,Asp.net,.net,Memory,类通常由成员变量和方法组成。当我们创建类的实例时,会为类的成员变量分配内存。成员方法是否也占用内存?这些方法存储在哪里?假设我们有以下类: public class Person { public string Name { get; set; } public Person(string name) { Name = name; } public string SayName() { string hello = "Hello

类通常由成员变量和方法组成。当我们创建类的实例时,会为类的成员变量分配内存。成员方法是否也占用内存?这些方法存储在哪里?

假设我们有以下类:

public class Person
{
   public string Name { get; set; }

   public Person(string name)
   {
        Name = name;
   }

   public string SayName()
   {
      string hello = "Hello! My name is ";
      return hello + name;
   }
}

Person p = new Person("John");
string yourName = p.SayName();
SayName()
函数在
调用堆栈上运行,并且
Person p
对象及其属性(
Name
)将保留在内存中,直到
垃圾收集进入并清除它

在内存方面,您应该更关注对象的实例字段(属性)、正在处理的对象数量,以及对象是否在某段时间处于
读取器
连接
。如果您的对象是<代码> Reader <代码>或<代码>连接< /代码>,您需要考虑< <代码> > < /Cord>语句> < /P> 伪代码:

using(DatabaseConnection dbConn = new DatabaseConnection()
{
    // Process your calls and data
}
// The object is Disposable and it's resources are cleared 

类只是一个蓝图,只要没有定义类类型的变量,它就不会占用任何空间。定义类类型的对象/实例后,类成员将在内存中占用一些空间。
实例的大小等于类中定义的成员大小之和。

方法实现占用每种类型的内存(我认为每种泛型的细化都会占用内存),但这不会增加每个对象实例的内存。例如,
obj.GetType()
返回表示所述方法(以及一系列其他内容)的类型。(实例)变量当然是每个实例的。@pst,为什么要发表评论这样好的答案?@AlexeiLevenkov说得很好。我肯定会投赞成票,我自己用我认为相当不错的答案回答了这个问题。@AlexeiLevenkov,因为它只是一个小的摘要,而且不完整:)“不,声明的方法不以每个实例为基础占用内存”可能是这里最简单的视图…“SayName()中的变量”,这将是hello,只在函数在作用域中时留在内存中。因此,一旦函数完成,变量就不再在内存中。“不完全正确,GC可以在不再需要引用时收集它们(这包括
this
!)是。这是真的。我想我应该在访问方面说得更清楚一些。“我认为,
阅读器
连接
”的某个时间[原文如此]——简单地概括为
IDisposable
可能更清楚,我认为