【问题标题】:What is better when using constructor parameters? [closed]使用构造函数参数时什么更好? [关闭]
【发布时间】:2013-07-02 14:47:13
【问题描述】:

我先举一两个例子。采取以下示例类:

class Sample
{
    private object _someObject;

    public Sample(object someobject)
    {
        _someObject = someobject;

        // If I then wanted to pass someobject to a method within the constructor, 
        // is it better to use the field version or the parameter version. Example:

        SomeMethod(someobject);

        // OR

        SomeMethod(_someObject);
    }
}

另外,我刚刚读完 Bill Wagner 的《Efficient C#》一书,想知道是否还有其他格式与此类似的书。

我很想知道为什么我应该按照编写的方式编写代码(例如更高效的 IL)

提前谢谢大家:)

【问题讨论】:

  • 我会使用本地字段,因为在多线程环境中,someobject 可能会在两者之间发生变化。
  • 关于你问题的第二部分,见stackoverflow.com/questions/2181729/…
  • @Corak:您的评论肯定是使用 parameter 而不是本地字段的论据吗?
  • 呃……我想的越多; someobject_someobject 都不能在构造函数中更改。还是我错过了一些非常奇怪的竞争条件,其中一个线程可以访问未使用其构造函数完成的对象的字段?但是是的,someobject 肯定不能在两者之间改变。
  • 通常你在私有成员的名字中使用下划线来避免输入“this”。前。但这是关于可读性,而不是性能。

标签: c# constructor coding-style


【解决方案1】:

没有区别,它们都是对同一个对象的引用。

【讨论】:

  • 不一定——正如@Corak 在他的评论中指出的那样,一个是线程安全的,一个不是。
  • @DanPuzey:它们是引用,如果 someobject 改变了,那么 _someoject 也会改变。同样不安全。不过,我通常使用内部字段,只是为了保持一致。
  • @ElDog:关键是如果不同的线程设置_someObject = new object(),那么这只会影响字段;参数不会改变。该字段不是线程安全的;参数是。
  • 如果你不得不担心构造函数中实例字段的线程安全,那你可能做错了什么。
  • @Jamiec 出于某种原因我完全忘记了。如果我没记错的话,值类型也没有关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-22
相关资源
最近更新 更多