Это своего рода открытый вопрос. Я всегда продолжаю чесать голову при выборе между ними. Я могу передать значения в класс по:
Передача аргумента функции класса:
MyClass m = new MyClass();
m.DoSomething(arg);
Передача аргумента при создании объекта:
MyClass m = new MyClass(arg);
m.DoSomething();
Установка значения с помощью другой функции / Свойство
MyClass m = new MyClass();
m.SetArg(arg);
m.DoSomething();
Я понимаю, это зависит от погоды, в которой объект должен сохранять аргумент, но опять же я думаю, что здесь есть тонкая грань? Если вы передадите слишком много переменных, это станет обычным функциональным вызовом.