У меня есть этот класс контейнера:
class Fruit
{
public Apple apple;
public Banana banana;
}
И у меня есть функция в другом классе, которая выглядит так:
public void ChangeFruit(Fruit fruit)
{
fruit.apple = memberApple;
fruit.banana = memberBanana;
}
И это прекрасно работает.
Однако я хочу знать, почему это не работает:
Если я изменю метод ChangeFruit, чтобы вместо контейнера брать фактические классы фруктов, например:
public void ChangeFruit(Apple apple, Banana banana)
{
apple = memberApple;
banana = memberBanana;
}
Тогда это не работает, если ключевое слово ref не передается с каждым аргументом. Почему мне нужно ключевое слово ref здесь, а не там?
Кстати, при вызове последнего ChangeFruit я вызываю его так:
ChangeFruit(myFruit.apple, myFruit.banana);
В отличие от ChangeFruit(myFruit);
Я просто хочу знать, что при передаче класса контейнера мне не нужно ключевое слово ref, но когда я передаю каждый фрукт по отдельности, мне это нужно. В любом случае я передаю myFruit, за исключением того, что в последнем примере я просто передаю его переменные-члены по отдельности, а не весь контейнер.