2017-01-12 3 views
-1

Каков наилучший способ передачи информации функции? должен ли мы передать список параметров? или мы должны создать класс и просто передать экземпляр этого класса, так что всякий раз, когда есть изменение в списке параметров, нам не нужно менять весь поток?Лучший подход к передаче информации функции

Передача переменной класса:

public class FooParams 
{ 
    string Name{get;set;} 
    string Password{get;set;} 
} 

public void GetFoo(Foo foo) 
{ 
} 

Passing список параметров

public void GetFoo(string name, string password) 
{ 
} 
+8

Это зависит ...... –

+3

Почему тег C++ здесь? – UnholySheep

+0

Возможный дубликат http://stackoverflow.com/questions/34932132/best-way-for-memory-to-pass-method-parameters –

ответ

0

ИМО, передавая список параметров путь в вашем случае, иногда вы хотите генерировать ошибки времени компиляции вместо того, чтобы искать все обычаи, когда вы что-то добавляете.

Если у вас есть большой список параметров, вы можете создать struct для копирования по значению (нет необходимости в классах-ссылочных типах).

И то, что вы ищете в качестве альтернативы FooParams необязательные параметры:

public void GetFoo(string name, string password, int somethingNew = 0) 
{ 
} 

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

+0

Вы говорите в контексте C++ или C#? –

+0

Вы можете захотеть класс, если он изменен. https://msdn.microsoft.com/en-us/library/ms229017.aspx –

+0

@AsadMehmood C#, который является синтаксисом, который вы использовали в своем вопросе. – user3185569

0

Вы не должны создавать класс/структуру только для связывания параметров в один объект, если только вы не собираетесь использовать этот объект параметра в других местах. В вашем примере, если это только для одного метода, то с помощью параметров будет простейшим как с точки зрения дизайна и производительности:

public void GetFoo(string name, string password) 
{ 
    /// Do stuff 
} 

Если, однако, это является частью библиотеки методов, которые могут между работать друг с другом, тогда вы могли бы рассмотреть возможность создания структуры в качестве носителя информации. (Это, проще говоря, цель Point структуры в System.Drawing пространства имен.)

(я должен отметить, что, хотя это правда, с использованием параметров вместо класса/структуры лучше для исполнения как в смысле что программа будет выполняться быстрее и займет меньше памяти, практическое различие совершенно ничтожно. Тем не менее, конструктивный аспект по-прежнему остается актуальной проблемой.)

2

Здесь есть что рассмотреть.
Это зависит от контекста, количества параметров, читаемости, неизменности и даже от личных предпочтений.

Вот лишь несколько случаев, чтобы рассмотреть следующие вопросы:

  • Если это просто просто string и int параметров, которые вы проезжаете, то, возможно, вы должны просто передать их как void foo (string s, int i)

  • Если Вам нужны к изменчивости по этим значениям, тогда вы можете обернуть их в класс и передать его.

  • Если эти параметры всегда приходят вместе, а затем рассмотреть оборачивать их в классе или структуры:

    void foo(int height, int width) 
    void foo(Size size) 
    
  • Если есть много различных параметров, вы могли бы рассмотреть оборачивать их в DTO или два и передайте его для лучшей читаемости. Например:

    void SendTo (string firstName, string LastName, string street, int apartmentNumber, string City) 
    void SendTo (Person person, Address address) 
    
Смежные вопросы