2016-06-22 2 views
1

После прочтения этого microsoft article о том, когда использовать свойства и методы, я немного смущен.C# Выбор между свойствами и методами

В примере на дне они говорят:

Следующий пример кода показывает полное приложение, которое предполагает , что доступ к свойству вычислительно недорог. Класс EmployeeData неправильно определяет свойство, возвращающее копию массива .

специально

Класс EmployeeData неправильно определяет свойство, которое возвращает копию массива.

Что было бы правильным путем?

fiddle of the example code

+1

Опасность угадывания без прочтения статьи: копия может быть дорогой и заслуживает метода (подразумевает некоторую работу, которая должна быть выполнена) вместо свойства (подразумевает только доступ к данным). Свойство должно возвращать ссылку на массив (если это даже подходит), а не его копия. – Conduit

+0

Разверните этот текст с помощью «Так что он должен использовать метод вместо этого». –

ответ

1

Это только руководство, но ваши свойства должны быть как можно более. Копирование массива, как и в примере, довольно велико для свойства. Это должен быть метод. Таким образом, любой, кто использует этот код, знает, что это может занять немного времени. Свойства обычно отражают аксессуар для частных полей, поэтому люди ожидают, что он вернется почти сразу. Надеюсь, это имеет смысл.

+0

Он просто щелкнул правой кнопкой мыши, чтобы удалить Employees get property и всегда вызывать CopyEmployeeRecords(), чтобы другие разработчики знали, что это «дорогая» функция для вызова? –

+0

@SvenB Точно! На самом деле это ничего не меняет, кроме как сказать кому-то, что это может быть интенсивным в вычислительном отношении (больше, чем просто возвращение поля) –

1

Свойство является «неправильным», потому что код внутри него медленный.

public EmployeeRecord[] Employees 
{ 
    get 
    { 
     return CopyEmployeeRecords(); // slow code in property - bad 
    } 
} 

Вместо этого, написать метод:

public EmployeeRecord[] Employees() 
{ 
    return CopyEmployeeRecords();  // slow code in method - ok 
} 
0

Секция

использовать метод, а не свойство, в следующих ситуациях.

в статье, которую вы читали, говорит вам использовать метод вместо свойства свойства возвращает массив.

Таким образом, правильный способ сделать это - создать метод для копирования массива.

Смежные вопросы