2013-07-02 3 views
-1

Начните с примера или двух. Возьмет следующий класс примера:Что лучше при использовании параметров конструктора?

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); 
    } 
} 

Кроме того, я только что закончил книгу под названием «Эффективный C#» Билл Вагнером и хотел бы знать, если есть какие-либо больше книг там с таким же форматом, как эта.

Я интересно знать, почему я должен писать код так, как написано (Более эффективный IL, например)

Заранее спасибо ребят :)

+1

Я бы использовал локальное поле, потому что в многопоточной среде «someobject» мог быть изменен между ними. – Corak

+1

О второй части вашего вопроса см. Http://stackoverflow.com/questions/2181729/which-c-sharp-4-0-book-would-you-purchase-and-why –

+0

@Corak: наверняка ваш комментарий является аргументом для использования параметра * *, а не локального поля? –

ответ

3

Он не делает никакой разницы, они все ссылки к одному и тому же объекту.

+1

Не обязательно - как указывает @Corak в своем комментарии, один является потокобезопасным, а другой нет. –

+1

@DanPuzey: они являются ссылками, если какой-то объект изменен, то также изменяется и сам объект. Небезопасно. Тем не менее, я обычно использую внутреннее поле, просто для консистенции. – ElDog

+0

@ElDog: точка в том, что если другой поток устанавливает '_someObject = new object()', то это затронет только поле; параметр не будет изменен. Поле не является потокобезопасным; параметр есть. –