C# 局部变量与专用字段效率

C# 局部变量与专用字段效率,c#,variables,methods,scope,C#,Variables,Methods,Scope,是否有一个经验法则是关于什么时候应该超越另一个 我很好奇,因为我在这里遇到了一个难题,我有一个非常常用的方法,返回一个相当大的自定义类类型。我想知道在一个字段中保存这个自定义类的实例是否会更便宜,然后在方法中每次更改并返回它,而不是像每次在方法中创建一个新的类实例那样创建一个全新的对象。您似乎要求的是一个所谓的惰性字段。您将其声明为System.Lazy,如下所示 private System.Lazy<YourClass> mYourClassInstance; ... mYo

是否有一个经验法则是关于什么时候应该超越另一个


我很好奇,因为我在这里遇到了一个难题,我有一个非常常用的方法,返回一个相当大的自定义类类型。我想知道在一个字段中保存这个自定义类的实例是否会更便宜,然后在方法中每次更改并返回它,而不是像每次在方法中创建一个新的类实例那样创建一个全新的对象。

您似乎要求的是一个所谓的惰性字段。您将其声明为
System.Lazy
,如下所示

private System.Lazy<YourClass> mYourClassInstance;

...

mYourClassInstance = new System.Lazy<YourClass>(() => new YourClass());

返回新创建的类实例和返回字段之间的主要区别是巨大的:在后一种情况下,实例是共享的,因为所有客户端都接收到指向同一实例的指针。这意味着:每当任何客户端(或实例的原始创建者)更改实例中的某些内容时,所有客户端现在都将看到所有这些更改。在前一种情况下,所有实例都不同,更改只影响当前客户端


因此,仔细查看需求,找出哪些行为是必需的。把它们弄错会产生毁灭性的影响。

是的,有一条规则,而且非常简单:当你需要一个局部变量时,使用一个局部变量;当你需要一个字段时,使用一个字段。这两个字段在功能上会做不同的事情,你需要首先验证行为的变化是否正常。当你返回一个类的实例(你不能返回一个类)时,你返回它的引用。不管对象是局部变量还是字段,它仍然在堆上。字段和局部变量之间的选择不是效率的问题,而是功能的问题。@K_Nielsen。。。每次调用的返回字段(类类型)总是比创建新实例快。但不要忘记,若返回字段,那个么返回引用。@Vasek,这是一个粗体的语句。您是否有任何指向文件的链接?你的第二句话“如果你返回字段,你就返回引用”是什么意思?解决这个关键问题的第一个答案,请投赞成票!
mYourClassInstance.Value