gpt4 book ai didi

C# 静态与实例方法

转载 作者:IT王子 更新时间:2023-10-29 04:36:52 26 4
gpt4 key购买 nike

我冒着这个风险,这可能是一个新问题,但这里是。我很想向一个类添加一个方法,该类在给定时间可能在内存中有成千上万个实例。现在,另一个选项是创建一个带有静态方法的静态类,然后只在那里创建 [static] 方法,而不是在类中创建实例方法。像这样:

这个:

public static class PetOwner
{
public static void RenamePet(Pet pet, string newName)
{
pet.Name = newName;
}
}

取而代之的是:

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

public void Rename(string newName)
{
this.Name = newName;
}
}

我只是想知道静态类替代方案是否会占用更少的内存。

谢谢!

最佳答案

只有数据字段需要按实例存储,具体取决于特定条件和优化。例如,定义 Int32 成员的类的 10,000 个实例将消耗约 40,000 字节的内存。

另一方面,由于实习,字符串并不那么简单。你可以试试这个作为例子:

object.ReferenceEquals("", string.Empty) // returns true!

如果相同的 10,000 个实例也定义了一个字符串,并且每个实例的字符串都相同,那么您将有 10,000 个引用指向相同的数据,从而大大减少开销(但在 32 位环境中,引用占用了另外 40,000 字节)。

其他人指出的方法,无论是静态的还是实例的,都只加载一次。

使用实例方法或静态方法的决定不受性能原因的影响,而取决于方法的预期使用方式。在您的情况下,该方法需要该类型的一个实例作为其第一个参数,因此它也可能是一个实例方法。

根据我的经验,静态方法最适合作为返回新实例的类型构造函数的替代方法。构造函数一旦被调用,就必须返回一个新实例或抛出异常,这可能是不可取的。如果某些事情失败,静态方法可以返回 null,或者返回一个缓存的实例(如果构造函数是一个昂贵的操作,后者很有用)。

关于C# 静态与实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4765290/

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